これは、 QCoreApplication :: quit()のドキュメントからはすぐにはわかりませんでした。
quit()スロットが呼び出されたときに、イベントループ内の保留中のイベントはキャンセルされますか?
これは、 QCoreApplication :: quit()のドキュメントからはすぐにはわかりませんでした。
quit()スロットが呼び出されたときに、イベントループ内の保留中のイベントはキャンセルされますか?
呼び出す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()
ます。