C++ Qt:退出应用程序->;适当清理检查表

C++ Qt:退出应用程序->;适当清理检查表,c++,python,qt,C++,Python,Qt,我总是无法正确关闭Qt应用程序。从Qt::应用程序退出时应该注意什么?我想编译一个检查表,根据程序使用的功能,我可以按照该检查表正确退出所有部分。例如,如果我使用QThreads,那么需要做什么来确保它们正确关闭,等等,所有其他可能需要特别注意的部分 我希望我不是唯一一个有这样问题的人,它对很多人都有用。 < P>除了适当的C++设计外,没有任何检查表。不幸的是,QThread没有提供任何正常的默认销毁行为。在C++的地盘上,这是名义上的NO.NO。你需要一些 QObjult拥有你的线程,在消失

我总是无法正确关闭Qt应用程序。从Qt::应用程序退出时应该注意什么?我想编译一个检查表,根据程序使用的功能,我可以按照该检查表正确退出所有部分。例如,如果我使用QThreads,那么需要做什么来确保它们正确关闭,等等,所有其他可能需要特别注意的部分


我希望我不是唯一一个有这样问题的人,它对很多人都有用。

< P>除了适当的C++设计外,没有任何检查表。不幸的是,
QThread
没有提供任何正常的默认销毁行为。在C++的地盘上,这是名义上的NO.NO。你需要一些<代码> QObjult<代码>拥有你的线程,在消失之前,要么关掉它们,要么终止它们,然后在它们被破坏之前等待它们。您自己编写的所有类也是如此:它们在被破坏时必须正常工作。Qt通常在其各种类的实例被删除时会正常工作,
QThread
确实是一个突出的例子


<>你遵循C++设计的基本原则,即对象在销毁时释放资源,你就不会有任何问题。使用智能指针,包括C++11(如果可用)
QPointer
QSharedPointer
QScopedPointer
都是您的朋友。

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

// Note - using Qt 5 connect style
QThread* pThread = new QThread;
connect(pThread, &QThread::finished, pThread, &QThread::deleteLater);
现在所要做的就是让线程完成处理,或者让线程的所有者调用pThread->quit()

有一篇关于如何正确使用QThreads的好文章

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