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