2015-08-26 4 views
0

У меня есть QMainWindow, который используется для просмотра и просмотра изображений. Эти изображения представляют собой специальные медицинские изображения, которые читаются с помощью обертки, которую я написал.QApplication не выходит, когда основное окно закрывается

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 + перерыв, то выход из приложения (очевидно), но я получаю следующее сообщение:

QObject :: ~ QObject: Таймеры не могут быть остановлены из другого потока

Я заметил, что если Я выбираю только один миниатюру и отображаю ее в QVTKWidget, программа заканчивается просто отлично. Но когда я выбираю один миниатюру, покажу ее, а затем выберите другую миниатюру, тогда программа не завершится, когда я закрою окно.

Мне было интересно, может ли кто-нибудь сказать мне, что я делаю неправильно здесь. Я бы с удовольствием скопировал/вставлял больше кода, но я не уверен, какие части актуальны в данный момент.

Я прочитал следующее в надежде на ответ, но я до сих пор не удалось решить эту проблему:

Qt app stays in memory even after MainWindow is closed

Qt process stays in memory after application closes

C++ application does not kill all processes on exit

Благодарности

ответ

0

RazrFalcon дал мне хороший намек. Я не эксперт в Qt (пока), поэтому я искал Qthread, который выполнялся во всех неправильных местах.

Ответ лежит в классе vtkRenderWindowInteractor. Для большинства vtkObjects (если я не ошибаюсь) вызов new на vtkSmartPointer удаляет/останавливает объект, если он уже существует. Однако этого не происходит для vtkRenderWindowInteractor.

Решение было следующим. При переключении между иконками, я должен был проверить существование интерактора, и если он работает, я бы просто позвонить

this->_mainInteractor->TerminateApp(); 

, чтобы остановить скрытую QThread.

0

Вы остановили все свои темы? Я не знаком с VTK, но похоже, что кто-то запускает какой-то код в потоке и не останавливает их должным образом.

+0

Я не думаю, что я явно запускаю любые потоки, но я могу неявно создавать/запускать один.Я отредактирую свой вопрос, чтобы предоставить дополнительную информацию. – siavashk

 Смежные вопросы

  • Нет связанных вопросов^_^