[英]QApplication does not exit when main window closes
我有一個QMainWindow,用於瀏覽和查看圖像。 這些圖像是特殊的醫學圖像,這些圖像是使用我編寫的包裝紙讀取的。
GUI的左側有一個QListview,它顯示了一個縮略圖列表。 當用戶選擇其中之一時,QVTKWidget在右側顯示相應的圖像。 我使用vtkRenderWindowInteractor操作顯示的圖像。
我的主要內容如下:
#include <QApplication>
#include "GUIClassName.h" //inherits from QMainWindow
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
GUIClassName w;
w.show();
return a.exec();
}
我的closeEvent如下所示:
void GUIClassName::closeEvent(QCloseEvent* event)
{
// mainInteractor is a vtkSmartPointer<vtkRenderWindowInteractor>
if (this->_mainInteractor != NULL)
this->_mainInteractor->TerminateApp();
event->accept();
}
問題是,當我關閉QMainWindow時,應用程序不會終止。 does not appear. 也就是說,命令提示符保持打開狀態,並且不出現。 如果我按Ctrl + break,則應用程序退出(顯然),但是我收到以下消息:
QObject ::〜QObject:無法從另一個線程停止計時器
我注意到,如果僅選擇一個縮略圖並將其顯示在QVTKWidget中,程序將終止。 但是,當我選擇一個縮略圖時,先顯示它,然后選擇另一個縮略圖,則當我關閉窗口時,程序不會終止。
我想知道是否有人可以告訴我我在做什么錯。 我很樂意復制/粘貼更多代碼,但是目前尚不確定哪些部分相關。
我已閱讀以下內容,希望得到答案,但到目前為止,我仍然無法解決此問題:
謝謝
您是否停止了所有線程? 我對VTK不熟悉,但是看起來有人在線程中運行了一些代碼並且沒有正確停止它們。
RazrFalcon給了我一個很好的提示。 我還不是Qt專家,所以我一直在尋找在所有錯誤位置執行的Qthread。
答案在於vtkRenderWindowInteractor類。 對於大多數vtkObjects(如果我沒記錯的話),在vtkSmartPointer上調用new會刪除/停止該對象(如果已存在)。 但是,對於vtkRenderWindowInteractor不會發生這種情況。
解決方法如下。 在縮略圖之間切換時,我必須檢查交互器是否存在,如果它正在運行,我會打電話給
this->_mainInteractor->TerminateApp();
停止隱藏的Qthread。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.