簡體   English   中英

當主窗口關閉時,QApplication不會退出

[英]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中,程序將終止。 但是,當我選擇一個縮略圖時,先顯示它,然后選擇另一個縮略圖,則當我關閉窗口時,程序不會終止。

我想知道是否有人可以告訴我我在做什么錯。 我很樂意復制/粘貼更多代碼,但是目前尚不確定哪些部分相關。

我已閱讀以下內容,希望得到答案,但到目前為止,我仍然無法解決此問題:

即使關閉MainWindow,Qt應用程序仍保留在內存中

Qt進程在應用程序關閉后仍保留在內存中

C ++應用程序不會在退出時終止所有進程

謝謝

您是否停止了所有線程? 我對VTK不熟悉,但是看起來有人在線程中運行了一些代碼並且沒有正確停止它們。

RazrFalcon給了我一個很好的提示。 我還不是Qt專家,所以我一直在尋找在所有錯誤位置執行的Qthread。

答案在於vtkRenderWindowInteractor類。 對於大多數vtkObjects(如果我沒記錯的話),在vtkSmartPointer上調用new會刪除/停止該對象(如果已存在)。 但是,對於vtkRenderWindowInteractor不會發生這種情況。

解決方法如下。 在縮略圖之間切換時,我必須檢查交互器是否存在,如果它正在運行,我會打電話給

    this->_mainInteractor->TerminateApp();

停止隱藏的Qthread。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM