Главная » Статьи » Программирование » С/С++

Qt. Закрытие дочерних окно

Обычно при работе с приложениями может использоваться несколько активных окон приложения, один из них главное, то которое отображается при открытии приложения, не считая приложения с окном авторизации, если таковое первым отображается при запуске.

 

Если мы дополнительные окно открываем как QDialog, то тут все понятно, но если используем QWidget или QMainWindow, то тут совсем другое дело. Если открыть окно, наследуемое от QWidget, а потом закрыть окно из класса, которого мы его открыли, то открытое окно не закроется и будет продолжать работать.

 

Из подобной ситуации есть два выхода: простой и сложный. Способ, когда мы при создании очередного класса окна указываем родителя не рассматриваем потому, что при этом у нас дочернее окно будет отображаться в окне родителе, а это нам совсем не нужно.

Сложный способ. Создать в окне родителе список указателей на окна детишек. Таким образом при закрытии родителя мы сможем пройтись по списку и закрыть детей. Для перехвата события «Окно закрывается», используем метод:

protected:

    void closeEvent(QCloseEvent *event);

Добавляем это в заголовочный файл класса окна, а в файл с исходником:

void MainWindow::closeEvent(QCloseEvent *event) {

   QList<QWidget> *list = new QList<QWidget>();

   for (int i=0;i<list->length();i++)

      list->at(i).close();

}

 

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

 

Простой способ. Просто в методе «closeEvent» из примере выше вместо прохода по списку напишите: «QApplication::closeAllWindows()» - это закроет все окна программы.

Категория: С/С++ | Добавил: Алексей (27.02.2017) | Автор: Фролов Алексей Алексеевич E W
Просмотров: 2528 | Теги: QT, QWidget, QMainWindow, QApplication | Рейтинг: 0.0/0
Всего комментариев: 0
ComForm">
avatar