我知道要在类中使用Qt的信号和插槽机制,该类必须包含Q_OBJECT
宏,但我试图使用信号和插槽main()
,而不使用任何类.
到目前为止,这是我的代码:
#include#include #include #include 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的...
从QObject或其子类之一(例如,QWidget)继承的所有类都可以包含信号和槽.1
因此,您不能使用放置在QObject
儿童之外的插槽.
您可以将信号连接到派生自的类中的插槽QObject
.将您的插槽放在一个分开的.h/.cpp文件中的类中:
class MyClass : public QObject { Q_OBJECT ... public slots: void saveText(); };
根据Qt5:Qt 5中的新信号槽语法.您可以连接到这些类型的全局函数.(感谢@ thuga的评论)