LINUX.ORG.RU

Нужно наоборот тут писать и туда ссылку, чё как не свой. (=

cinyflo ★★★★★
()

1. Закрытие окон в произвольном порядке может привести к непредсказуемому результату, когда обработчик закрытия окна А, ожидает, что окно Б ещё живо.

2. Обработчик закрытия может сам удалять другие окна. То-есть итератор списка окон может в любой момент стать невалидным.

3. Окна при закрытии могут показывать другие окна, к примеру «Вы точно уверены?» или «Сохранить документ?».

4. Заранее неизвестны окна, которые должны выжить при массовом закрытии, поскольку контекст приложения глобальный.

Вывод: программа точно должна знать что она закрывает. Иначе почему бы просто не остановить главный цикл через QCoreApplication::quit().

Dendy ★★★★★
()

Я бы сделал у всех окон, которые в твоем случае надо закрывать слоты, которые бы корректно отрабатывали закрытие окна, с закрытием всех открытых файловых дексрипторов, вопросами к пользователю и т.д. И в нужный момент посылал сигнал на закрытие.

grondek
()

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

frozenix ★★★
()
Ответ на: комментарий от Dendy

Вывод: программа точно должна знать что она закрывает.

Поддерживаю. Денди истину говорит.

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

А та часть кода, куда ты хотел вставить свой foreach c перебором и закрытием окон, я уверен, не должна ничего знать ни о каких окнах. Там просто должно наступить.... эээ... «осознание», что момент великого сворачивания окон наступил, а сама работа по закрытию окон должна быть делегирована нужной подсистеме архитектуры.

pathfinder ★★★★
()
Последнее исправление: pathfinder (всего исправлений: 1)
Ответ на: комментарий от Dendy

4. Заранее неизвестны окна, которые должны выжить при массовом закрытии, поскольку контекст приложения глобальный.

Как раз заранее известны окна, которые должны выжить при массовом закрытии, для этого и используется w != loginDialog && w != mainWindow.

Насколько я понял, можно сначала закрыть все popup, потом все modal, ну и потом всё остальное, оставив только нужные мне окна.

UVV ★★★★★
() автор топика
Ответ на: комментарий от pathfinder

А та часть кода, куда ты хотел вставить свой foreach...

Находится в «main window».

UVV ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.