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