2011-01-12 13 views

答えて

4

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()への呼び出しを取り除くと、それが行われます。

関連する問題