Я создал функцию для отображения диалога в консольном приложении 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.