2011-01-12 44 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()的呼叫。