QCoreApplication :: quit () отменяет все ожидающие события? - PullRequest
1 голос
/ 13 января 2011

Это не было сразу ясно из документов для QCoreApplication :: quit () .

Отменяются ли какие-либо ожидающие события в цикле событий, когда слот quit ()вызывается? * * 1005

1 Ответ

4 голосов
/ 13 января 2011

Вызов 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().

...