我创建了一个在Qt控制台应用程序中显示对话框的函数。该函数位于名为aClass
的单独类中。这是我所拥有的:
aClass.h:
#include <QObject>
class aClass : public QObject
{
Q_OBJECT
public:
void showDialog(int delay);
signals:
void quitQApplication();
};
aClass.cpp:
void aClass::showDialog (int delay)
{
QDialog splash;
QEventLoop eventDialog;
splash.show();
QTimer::singleShot(delay, &eventDialog, &QEventLoop::quit);
eventDialog.exec();
}
我的代码比这复杂得多,并且涉及很多线程。但是,问题的简化版本是显示对话框,等待对话框消失然后退出应用程序。以下是我在main.cpp
中所拥有的东西:
main.cpp:
int main(int argc, char** argv)
{
QApplication app(argc, argv);
aClass _aClass;
QObject::connect(&_aClass, &aClass::quitQApplication, &app, &QApplication::quit, Qt::QueuedConnection);
_aClass.showDialog(2000);
emit _aClass.quitQApplication();
return app.exec();
}
上面的代码有效。但是,问题在于有时emit _aClass.quitQApplication();
发生在_aClass.showDialog(2000);
之前,即:
int main(int argc, char** argv)
{
QApplication app(argc, argv);
aClass _aClass;
QObject::connect(&_aClass, &aClass::quitQApplication, &app, &QApplication::quit, Qt::QueuedConnection);
emit _aClass.quitQApplication();
_aClass.showDialog(2000);
return app.exec();
}
在这种情况下(上面的代码),显示对话框,但立即消失。此外,该应用程序不会退出,并且似乎具有活动的事件循环。有人可以解释这里发生了什么以及如何确定
与emit _aClass.quitQApplication();
和_aClass.showDialog(2000);
的执行顺序无关?
谢谢。
我正在使用Qt 5.12。