我在QT中尝试了一个非常简单的程序。我在QT designer中用一个按钮创建了一个对话框。我想要有程序,当我点击按钮时,我会得到消息框。我调试了这个程序。但是,点击按钮后,信号不会出现在功能OnClickedPushButton(bool)上。哪里出错了?我的代码如下所示:
#include "qttest.h"
#include <QtGui>
#include <QMessageBox>
QTTest::QTTest(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(OnClickedPushButton()));
QPushButton *button = new QPushButton(this);
button->setText("ClcikMe");
button->setGeometry(QRect(QPoint(150, 50), QSize(85, 25)));
connect(button, SIGNAL(clicked()), this, SLOT(OnClickedPushButton()));
}
QTTest::~QTTest()
{
}
void QTTest::OnClickedPushButton()
{
QMessageBox::about(this, "Message", "You pushed button.");
}我可以构建它,也可以启动它。但是,调试器在构造函数中写入以下消息:
QObject::connect: No such slot QTTest::OnClickedPushButton() in qttest.cpp:9
QObject::connect: (sender name: 'pushButton')
QObject::connect: (receiver name: 'QTTestClass')
QObject::connect: No such slot QTTest::OnClickedPushButton() in qttest.cpp:14
QObject::connect: (receiver name: 'QTTestClass')我可以在窗口看到两个按钮。pushButton和button。但是,如果我将点击按钮,消息将不会因为错误的插槽映射而出现。你知道怎么做才对吗?
发布于 2017-04-23 19:31:39
这里有两种可能:要么像Avi提到的那样将OnClickedPushButton声明为一个插槽,要么使用new signal/slot connection syntax。使用新语法,您可以将信号连接到任意函数,如下所示:
connect(pushButton, &QPushButton::clicked, this, &QTTest::OnClickedPushButton);与旧语法相比,它的主要优点是在编译时进行检查,并且不会出现像现在这样的运行时错误。
发布于 2017-04-23 15:40:49
您需要在您的头文件中将'OnClickedPushButton‘声明为插槽。编译器在代码的插槽列表中找不到指定的函数。
发布于 2017-04-23 15:20:41
如果您在创建项目时已经创建了一个主窗口,那么您不必手动创建按钮。您可以使用设计器打开MainWindow,拖放按钮,然后右键单击按钮,选择"Go to slot“选项,这将打开源代码。样本源在这里,
#include "qttest.h"
#include "ui_qttest.h"
#include <QMessageBox>
QTTest::QTTest(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::QTTest)
{
ui->setupUi(this);
}
QTTest::~QTTest()
{
delete ui;
}
void QTTest::on_pushButton_clicked()
{
QMessageBox::about(this, "Message", "You pushed button.");
}另外,请粘贴您的标题代码。
https://stackoverflow.com/questions/43567085
复制相似问题