2

从QCoreApplication::quit()的文档中我并没有立即清楚这一点。

调用 quit() 槽时,事件循环中的任何未决事件是否被取消?

4

1 回答 1

5

调用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().

于 2011-01-13T08:24:02.153 回答