Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
 
traktort
6 / 6 / 3
Регистрация: 05.11.2014
Сообщений: 67
#1

Закрытие дочернего окна и Qt-флаги - C++ Qt

02.06.2016, 16:27. Просмотров 2750. Ответов 24

Есть окно (QWidget) Form1, по нажатию кнопочки на нем создается другое окно (QWidget) Form2.

C++ (Qt)
1
2
Form2*f2 = new Form2(this);
f2->show();
При закрытии первой формы должна закрываться и вторая.

Как лучше всего это сделать?

Надеялась, что это можно сделать с помощью флагов.
Типа
C++ (Qt)
1
setWindowFlags(Qt::Dialog);
Потом надеялась, что при закрытии Form1 испускает какой-то сигнал.
И писать бы тогда в конструкторе Form2:

C++ (Qt)
1
connect(parent, &QWidget::iamclosed, this, &QWidget::close);
Не нашла.

Вопрос, а как лучше? (Читай как делают нормальные люди)
Если учесть, что Form2 будет создаваться не только в Form1.
Наследовать все формы, в которых вызывается Form1 от чего-то (и вообще чего?), имеющего сигнал iamclosed и испускающего его при закрытии вроде слишком хитро закручено...
Варианты у меня такие:
1) Все таки есть какой-то флаг, найти его и безудержно радоваться
2) Добавить сигнал iamclosed() в Form1 , испускать его при закрытии, коннект делать после создания формы Form2
3) Добавить сигнал iamclosed() в Form1 , испускать его при закрытии, коннект делать в конструкторе Form2

Всем спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2016, 16:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Закрытие дочернего окна и Qt-флаги (C++ Qt):

Связь основного и дочернего окна
Попытался осуществить связь основного и дочернего окна, но нечего не вышло. ...

Событие активации дочернего mdi окна
Добрый день! На форме создан QMdiArea, а в нем несколько дочерних mdi-окон....

Закрытие окна кнопкой
Добрый вечер. Подскажите пожалуйста как закрыть окно кнопкой. Вот что имеется...

Закрытие окна формы
Привет всем, такой вопрос, как можно вызывать события по закрытию окна. Делаю...

Закрытие диалогового окна из слота
Приветствую! Надеюсь сможете помочь с решением данной задачи: Если смотреть...

Закрытие окна/приложения из кода
нужно закрыть окна/приложения из кода( т. е. скажем по условию х=2 закрываем...

24
0x90h
321 / 287 / 108
Регистрация: 01.10.2015
Сообщений: 863
03.06.2016, 17:09 #21
Графическое Qt-приложение по умолчанию завершается, когда будет закрыто последнее окно. Если вы инстанцируете объект вторичной формы (потомка QWidget) из первичной (потомка QMainWindow) без указания родителя, то на выходе получите два top-level виджета, т.е. оба окна не будут иметь родителя. Вы можете первой закрыть потомка QMainWindow, а потомок QWidget останется на экране, несмотря на свою логическую "вторичность"
1
pdn_mail
8 / 8 / 3
Регистрация: 20.10.2015
Сообщений: 50
03.06.2016, 17:16 #22
Цитата Сообщение от 0x90h Посмотреть сообщение
Вопрос решается наследованием от QDialog,
Спасибо, думал что можно без наследования от QDialog обойтись, видимо такого способа нет, либо использовать обработку destroyed.
Цитата Сообщение от nmcf Посмотреть сообщение
Но ведь если главное окно закрыть, то и приложение закроется,
Нет, окна без родителя имеют собственный loop event, поэтому могут существовать отдельно. Но если есть разделяемые данные, то обычно это приводит к краху приложения потом.
0
Wyn
1056 / 638 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
03.06.2016, 17:20 #23
Цитата Сообщение от 0x90h Посмотреть сообщение
Графическое Qt-приложение по умолчанию завершается, когда будет закрыто последнее окно.
Блин. Этож как давно данной проблемы у меня не возникало(из-за того, что по уму архитектуру приложения делал), что я о подобной вещи позабыл? =(
0
0x90h
321 / 287 / 108
Регистрация: 01.10.2015
Сообщений: 863
03.06.2016, 17:22 #24
pdn_mail, QDialog надо использовать по прямому назначению - для организации диалога с пользователем, а большинство использует его исключительно как средство получить отдельное "окошко"... Пересмотрите свой подход к проектированию интерфейса, хотя я допускаю, что у вас есть свои причины для применения подобного подхода.

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

Не по теме:

А это уже свидетельство того, что "крах" нужно было устроить программисту, причем еще до того, как он это "сотворит".

0
zica
0 / 0 / 0
Регистрация: 04.04.2018
Сообщений: 1
04.04.2018, 14:52 #25
Я решал эту проблему так:

C++ (Qt)
1
2
3
4
5
6
QWidget* wgt = new QWidget();
wgt->setParent(this, Qt::Window);
 
...
 
wgt->show();
0
04.04.2018, 14:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2018, 14:52
Привет! Вот еще темы с решениями:

Отследить закрытие окна из панели задач
Необходимо различать два события 1. Нажатие на "крестик" 2. нажатие "закрыть"...

Закрытие приложения при закрытии диалогового окна
Очередная микротема от новичка в Qt) Подскажите как закрыть приложение при...

Закрытие окна по нажатию кнопки или клику вне его
Всем доброго времени суток. Несколько дней мучаюсь не могу придумать как...

QGraphicsItemAnimation - нет ли утечек памяти при закрытие главного окна во время анимации?
Привет, ну вот создаю я анимацию элемента QGraphicsScene... (перенёс в одну...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru