Qt按钮无法连接插槽

时间:2018-03-16 16:33:59

标签: c++ qt signals-slots

我使用QT Designer创建一个简单的对话框,并在其上放置pushbutton。然后我在名为pressed()的{​​{1}}信号上添加了一个自定义插槽。我看到生成的代码,可以看到有test_button()函数,其中包含以下内容:

setupUI

我有QObject::connect(pushButton, SIGNAL(clicked()), TestUIClass, SLOT(test_button())); testui.cpp

testui.h

这是#include <QtWidgets/QMainWindow> #include "ui_testui.h" class TestUI : public QMainWindow { Q_OBJECT public: TestUI(QWidget *parent = 0); ~TestUI(); virtual void test_button(); private: Ui::TestUIClass ui; };

testui.cpp

我的理解是这就是我所要做的一切,但我无法得到消息框。

#include "testui.h"
#include <QMessageBox>

TestUI::TestUI(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
}

TestUI::~TestUI()
{

}

void TestUI::test_button()
{
    QMessageBox msgBox;
    msgBox.setText("The document has been modified.");
    msgBox.setInformativeText("Do you want to save your changes?");
    msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
    msgBox.setDefaultButton(QMessageBox::Save);
    int ret = msgBox.exec();
}

1 个答案:

答案 0 :(得分:3)

首先,您需要告诉Qt您的插槽实际上插槽:

public slots:  // or protected/private
    void test_button();

没有必要让插槽虚拟......

其次,用于点击&#39; signal应该接受一个布尔参数:

void test_button(bool);

对于普通按钮,您可以忽略该值。

最后,但这只是一个提示:Qt在版本5中引入了一个用于连接信号/插槽的新syntax

QObject::connect(pushButton, &QPushButton::clicked, theUI, &TestUIClass::test_button);

我更喜欢它,但取决于你使用哪一个......