我知道要在类中使用 Qt 的信号和槽机制,该类必须包含 Q_OBJECT
宏,但我试图在 main( )
,不使用任何类。
到目前为止,这是我的代码:
#include <QApplication>
#include <QWidget>
#include <QTextEdit>
#include <QtGui>
void saveText();
int main(int argv, char **args)
{
QApplication app(argv, args);
QTextEdit textEdit;
QPushButton saveButton("Save!");
QPushButton exitButton("Exit!");
QObject::connect(&exitButton,SIGNAL(clicked()),qApp,SLOT(quit()));
QObject::connect(&saveButton,SIGNAL(clicked()),qApp,SLOT(saveText()));
QVBoxLayout vlyt;
vlyt.addWidget(&textEdit);
vlyt.addWidget(&exitButton);
vlyt.addWidget(&saveButton);
QWidget mainWindow;
mainWindow.setLayout(&vlyt);
mainWindow.show();
return app.exec();
}
void saveText()
{
exit(0);
}
这是生成的 GUI 窗口:
从上面的代码中,退出按钮连接到 quit()
,这是一个 Qt 函数,单击时它会起作用。分配给函数 saveText()
的保存按钮被配置为退出,但实际上并没有退出。
请告诉我在理解 Qt 中的信号和槽时哪里出错了。
最佳答案
Qt4...
All classes that inherit from QObject or one of its subclasses (e.g., QWidget) can contain signals and slots.1
因此,您不能使用放置在 QObject
子级之外的插槽。
您可以将信号连接到从 QObject
派生的类中的槽。将您的插槽放在一个单独的 .h/.cpp 文件中的类中:
class MyClass : public QObject
{
Q_OBJECT
...
public slots:
void saveText();
};
根据 Qt5:New Signal Slot Syntax in Qt 5 .您可以连接到那些类型的全局函数。 (感谢@thuga 的评论)
关于c++ - 无法将信号连接到 main() 内的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734542/