QCoreApplication :: quit()是否取消所有待处理事件?

时间:2011-01-12 23:55:11

标签: qt events event-loop

QCoreApplication::quit()的文档对我来说并不是很清楚。

调用quit()插槽时是否取消了事件循环中的任何挂起事件?

1 个答案:

答案 0 :(得分:4)

致电QCoreApplication::quit()与致电QCoreApplication::exit(0)相同。在那里说

  

调用此函数后,应用程序将离开主事件循环并从调用返回到exec()。

由于事件循环已经离开,我认为任何待处理的事件都会被取消。

修改:我做了一个小测试用例,以显示未决事件确实已取消:

#include <QCoreApplication>
#include <QTimer>
#include <QDebug>

class MyObject : public QObject
{
        Q_OBJECT

    public Q_SLOTS:

        void start()
        {
            QCoreApplication::postEvent(this, new QEvent(QEvent::User));
            QCoreApplication::quit();
        }

    protected:

        void customEvent(QEvent* event)
        {
            qDebug() << "Event!";
        }

};

int main(int argc, char* argv[])
{
    QCoreApplication app(argc, argv);

    MyObject o;
    QTimer::singleShot(0, &o, SLOT(start()));

    return app.exec();
}

#include "main.moc"

在这种情况下,MyObject::start()中发布的事件永远不会到达。当然,如果您取消对QCoreApplication::quit()的调用。