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 2011-01-13 08:34:17