1

画像を参照して表示するために使用される 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 を閉じると、アプリケーションが終了しないことです。つまり、コマンド プロンプトが開いたままになり、[続行するには何かキーを押してください] が表示されません。Ctrl+break すると、アプリケーションは (明らかに) 終了しますが、次のメッセージが表示されます。

QObject::~QObject: 別のスレッドからタイマーを停止することはできません

サムネイルを 1 つだけ選択して QVTKWidget に表示すると、プログラムが正常に終了することに気付きました。しかし、1 つのサムネイルを選択して表示し、別のサムネイルを選択すると、ウィンドウを閉じてもプログラムが終了しません。

ここで私が間違っていることを誰かが教えてくれるかどうか疑問に思っていました。もっと多くのコードを喜んでコピーして貼り付けますが、現時点ではどの部分が関連しているかわかりません。

答えを期待して以下を読みましたが、これまでのところ、この問題を解決できませんでした。

MainWindow を閉じた後も Qt アプリがメモリに残る

アプリケーションを閉じた後も Qt プロセスがメモリに残る

C++ アプリケーションが終了時にすべてのプロセスを強制終了しない

ありがとう

4

2 に答える 2

0

すべてのスレッドを停止しましたか? 私は VTK に詳しくありませんが、誰かがスレッドでコードを実行し、それらを適切に停止しなかったようです。

于 2015-08-26T01:08:19.437 に答える