Cod*_*der 6 c++ user-interface qt qt4
我知道要在类中使用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);
}
Run Code Online (Sandbox Code Playgroud)
这是生成的GUI窗口:
从上面的代码中,退出按钮连接到quit(),这是一个Qt函数,当点击它工作.分配给该功能的保存按钮saveText()配置为退出,但不执行此操作.
请告诉我在理解Qt中的信号和插槽时出错了.
Qt4的...
从QObject或其子类之一(例如,QWidget)继承的所有类都可以包含信号和槽.1
因此,您不能使用放置在QObject儿童之外的插槽.
您可以将信号连接到派生自的类中的插槽QObject.将您的插槽放在一个分开的.h/.cpp文件中的类中:
class MyClass : public QObject
{
Q_OBJECT
...
public slots:
void saveText();
};
Run Code Online (Sandbox Code Playgroud)
根据Qt5:Qt 5中的新信号槽语法.您可以连接到这些类型的全局函数.(感谢@ thuga的评论)
| 归档时间: |
|
| 查看次数: |
13915 次 |
| 最近记录: |