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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос про QDialog и event loop  (Прочитано 2918 раз)
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« : Февраль 16, 2016, 15:00 »

Всем привет.
Ситуация такая, в приложении открывается документ и юзер может открывать разные диалоговые окна для настройки каких-либо параметров документа. Окна - наследники QDialog с кнопками Сохранить\Отмена.
При этом в главном окне есть таймер, по таймауту вызывается слот и  внутри этого слота текущий документ может быть закрыт. Если открыто диалоговое окно, то при сохранении параметров мы обратимся по нулевому указателю. Я знаю, что это происходит потому, что QDialog имеет свой event loop и продолжает обрабатывать события приложения.
Кто что посоветует, как можно решить эту проблему?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Февраль 16, 2016, 15:33 »

Завести QPointer<QDialog> и при таймауте решать - то ли закрыть и документ и диалог, то ли ничего не закрывать, пусть юзер решит в диалоге.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Февраль 16, 2016, 18:39 »

Просто перед "закрытием" документа насильно закрыть открытые для него диалоги.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #3 : Февраль 17, 2016, 12:41 »

Спасибо за ответы всем, сделал пока вот так:
Код:
QList<QDialog*> allDialogs = this->findChildren<QDialog*>();
foreach(QDialog* dialog, allDialogs) {
dialog->reject();
}
Буду тестировать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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