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

发布于 2024-10-11 14:19:50 字数 164 浏览 6 评论 0原文

QCoreApplication::quit()

当调用 quit() 槽时,事件循环中的任何待处理事件是否被取消?

This wasn't immediately clear to me from the docs for QCoreApplication::quit().

Are any pending events in the event loop cancelled when the quit() slot is invoked?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只想待在家 2024-10-18 14:19:50

调用 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() 的调用,它就会发生。

Calling QCoreApplication::quit() is the same as calling QCoreApplication::exit(0). There it says

After this function has been called, the application leaves the main event loop and returns from the call to exec().

Since the event loop is left, I would think any pending events are cancelled.

Edit: I made a small test case to show that pending events are indeed cancelled:

#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"

In this case, the event posted in MyObject::start() will never arrive. It will, of course, if you remove the call to QCoreApplication::quit().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文