我使用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();
}
答案 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);
我更喜欢它,但取决于你使用哪一个......