Qt:退出申请 - >清单正确清理

时间:2013-10-07 14:22:32

标签: c++ python qt

我一直有问题要正确关闭我的Qt应用程序。从Qt :: Application退出时应该注意什么?我想编译一个检查列表,我可以按照该列表正确退出所有部分,具体取决于程序使用的功能。例如,如果我使用QThreads,需要做些什么来确保它们正确关闭,以及所有其他可能需要特别小心的部分。

我希望我不是唯一一个有这些问题的人,结果证明对许多人有用。

2 个答案:

答案 0 :(得分:0)

除了正确的C ++设计之外,没有清单。遗憾的是,QThread没有提供任何理智的默认销毁行为。在C ++领域,名义上是禁止的。你需要一些拥有你的线程的QObject,并且在消失之前,需要注意退出或终止它们,然后在它们被销毁之前等待它们。你自己编写的所有类都是一样的:它们必须在被破坏时才能正常运行。 Qt通常在删除各种类的实例时起作用,QThread确实很突出。

一旦遵循C ++设计的基本原则,即对象在销毁时释放资源,您将不会遇到任何问题。使用智能指针,包括C ++ 11(如果可用)。 QPointerQSharedPointerQScopedPointer都是你的朋友。

答案 1 :(得分:0)

对于QThread,使用信号和插槽机制,你可以让QThread在完成时自动删除: -

// Note - using Qt 5 connect style
QThread* pThread = new QThread;
connect(pThread, &QThread::finished, pThread, &QThread::deleteLater);

现在所有必须发生的是线程完成处理,或线程的所有者调用pThread-> quit()。

关于如何正确使用QThreads,有一篇很棒的文章here

对于所有其他Qt类,只要对象/窗口小部件实例具有父级,Qt就会处理所有子对象的删除。通常,顶级窗口小部件是一个窗口,在关闭时将被删除。