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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Закрыть диалог из init()  (Прочитано 6216 раз)
Vilgeforce
Гость
« : Сентябрь 13, 2006, 15:42 »

В init() диалога идет обращение к БД, дабы информацию из нее в QComboBox этого диалога добавить. Отлавливается ошибка выполнения запроса. При возникновении ошибки выдается QMessageBox, после чего диалог появляться не должен. Вот вопрос - как недопустить появления диалога из его собственного init()?

return, emit this->reject(), this->close() не помогают. delete this и this->close(true) выдают Segmentation fault.

Система Linux, Qt 3.1.x
Записан
DenKor
Гость
« Ответ #1 : Сентябрь 13, 2006, 19:12 »

Насколько я помню для этого в процедуре init надо вернуть false на выходе.
return false; // ошибка окрытия диалога

добавлено спустя 4 минуты:

 >>delete this и this->close(true) выдают Segmentation fault.
Естественно ты сначала удаляешь указатель, а потом на него ссылаешься.
Попробуй наоботот :-)

А если серьезно смотри соообщение выше
Записан
BaltikS
Гость
« Ответ #2 : Сентябрь 14, 2006, 06:13 »

Цитировать
Насколько я помню для этого в процедуре init надо вернуть false на выходе.
return false;
Вообще инит это конструктор...
Ьыла похожая проблема, попробуй в showEvent по флагу закрывать. Фишка скроее всего в том что close() работает только после открытия окна......., т.е после show() или exec().

добавлено спустя 1 минуту:

 Или соответственно не вызывать данные методы!
Записан
bigirbis
Гость
« Ответ #3 : Сентябрь 14, 2006, 08:28 »

Будьте проще и люди к вам потянутся.

Единственный способ, по Страуструпу, завершить конструктор на стадии выполнения - выбросить исключение, которое потом можно отловить в методе, где этот конструктор вызывается. Это решит все проблемы.
Записан
Vilgeforce
Гость
« Ответ #4 : Сентябрь 14, 2006, 08:31 »

Люди, спасибо за ответы! Будем пробовать.
Записан
QCasper
Гость
« Ответ #5 : Сентябрь 14, 2006, 09:19 »

не, ну "delete this" это сильно  Веселый
Записан
Vilgeforce
Гость
« Ответ #6 : Сентябрь 14, 2006, 09:26 »

Цитата: "QCasper"
не, ну "delete this" это сильно  Веселый


Да я уж и так и так... Дай, думаю, попробую. Не вышло :-)
Записан
Alex03
Гость
« Ответ #7 : Сентябрь 14, 2006, 14:30 »

А QApplication::postEvent ( QObject * receiver, QEvent * event )
не устраит?
Записан
Vilgeforce
Гость
« Ответ #8 : Сентябрь 14, 2006, 14:34 »

Ща документации под рукой нет, так что спрошу - какой QEvent надо послать диалогу в данном случае?
Записан
bigirbis
Гость
« Ответ #9 : Сентябрь 14, 2006, 14:56 »

Ребят, несерьезно слать QEvent из конструктора диалога дабы застрелить этот диалог. Могут быть различия от одной реализации к другой. Исключение лучший вариант.

Читайте Страуструпа!!!
Записан
Grigory
Гость
« Ответ #10 : Сентябрь 15, 2006, 16:12 »

есть еще такая функция, как deleteLater()
Записан
Alex03
Гость
« Ответ #11 : Сентябрь 23, 2006, 12:48 »

Цитата: "bigirbis"
Ребят, несерьезно слать QEvent из конструктора диалога дабы застрелить этот диалог. Могут быть различия от одной реализации к другой. Исключение лучший вариант.

Читайте Страуструпа!!!


Читайте доку на postEvent()!!!

А вот исключения не факт!
Сама Qt как известно исключения не пользует, и бросать исключения из конструктора класса порождённого от Qt-эшного я бы поостерёгся.
Да и троллтех не советует бросать исключения сквозь их код.
Записан
bigirbis
Гость
« Ответ #12 : Сентябрь 24, 2006, 13:06 »

По поводу исключений в Qt - отрицательных эмоций не испытываю, ибо если нормально код написан, все работант превосходно ( по крайней мере в четверке ).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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