在执行新的事件循环之前,退出QApplication

时间:2019-02-01 02:13:54

标签: qt events dialog exit

我创建了一个在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();
}

在这种情况下(上面的代码),显示对话框,但立即消失。此外,该应用程序不会退出,并且似乎具有活动的事件循环。有人可以解释这里发生了什么以及如何确定

  1. 对话框显示已定义的时间间隔,然后
  2. 它消失了,然后
  3. 申请已结束

emit _aClass.quitQApplication();_aClass.showDialog(2000);的执行顺序无关?

谢谢。

我正在使用Qt 5.12。

0 个答案:

没有答案