Russian Qt Forum
Ноябрь 26, 2024, 14:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Убийство процесса-потомка  (Прочитано 1497 раз)
justahf
Гость
« : Март 15, 2014, 12:28 »

Здравствуйте. Недавно начал изучать QT, из прочитанного в книжках уяснил, что при уничтожении родителя все его потомки автоматически уничтожаются для любого объекта QT. Сам столкнулся вот с такой проблемой.

У меня есть класс Window1, отвечающий за главное (и единственное) окно программы.

Код:
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    Window1 *window1 = new Window1;
    window1->show();
    return app.exec();
}

Этот класс содержит слот button1Clicked(), обрабатывающий нажатие кнопки button1, в котором запускается firefox.

Код:
void Window1::button1Clicked()
{
    QString program = "firefox";
    proc = new QProcess(this);
    proc->start(program);
}

Собственно, firefox запускается. По логике (как я понял объектную модель QT) при уничтожении родителя этого процесса сам процесс тоже должен уничтожиться, никаких деструкторов вручную для этого писать не надо. Но, при закрытии окна Window1, firefox не выключается и продолжает работать. В то же время, если явно вызвать proc-> kill() , firefox завершает свою работу.

Собственно, пример сугубо учебный  Улыбающийся Может быть, я что-то неправильно понял, и мне нужно явно прописать убийство процесса в деструкторе класса главного окна Window1? И, может быть, есть возможность переопределить класс QApplication так, чтобы при закрытии приложения уничтожались все процессы, рожденные им?

Ну и если вопрос совсем глупезный и отражает мое полное непонимание предмета, ткните носом, где почитать  Улыбающийся
« Последнее редактирование: Март 15, 2014, 12:30 от justahf » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Март 15, 2014, 12:33 »

А если так?
Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   Window1 window1;
   window1.show();
   return app.exec();
}
 

или так:
Код
C++ (Qt)
int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   Window1 *window1 = new Window1;
   window1->show();
   int ret = app.exec();
   delete window1;
   return ret;
}
 

Деструктор Window1 у вас не вызывается, поэтому и объект процесса не разрушается.
Записан
justahf
Гость
« Ответ #2 : Март 15, 2014, 12:41 »

Деструктор Window1 у вас не вызывается, поэтому и объект процесса не разрушается.

Воистину. Вы сделали меня грустить, очень сильно. Спасибо, пошел дальше книжки читать  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.241 секунд. Запросов: 22.