1
これは、QCoreApplication::quit()のドキュメントからすぐにわかりませんでした。QCoreApplication :: quit()は保留中のイベントをすべてキャンセルしますか?
quit()スロットが呼び出されたときにイベントループ内の未処理イベントがキャンセルされましたか?
これは、QCoreApplication::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()
への呼び出しを取り除くと、それが行われます。
はい、スレッドを実行している場合は注意してください。途中で終了します。 – ismail