Russian Qt Forum

Qt => Общие вопросы => Тема начата: Vilgeforce от Сентябрь 13, 2006, 15:42



Название: Закрыть диалог из init()
Отправлено: 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


Название: Закрыть диалог из init()
Отправлено: DenKor от Сентябрь 13, 2006, 19:12
Насколько я помню для этого в процедуре init надо вернуть false на выходе.
return false; // ошибка окрытия диалога

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

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

А если серьезно смотри соообщение выше


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

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

 Или соответственно не вызывать данные методы!


Название: Закрыть диалог из init()
Отправлено: bigirbis от Сентябрь 14, 2006, 08:28
Будьте проще и люди к вам потянутся.

Единственный способ, по Страуструпу, завершить конструктор на стадии выполнения - выбросить исключение, которое потом можно отловить в методе, где этот конструктор вызывается. Это решит все проблемы.


Название: Закрыть диалог из init()
Отправлено: Vilgeforce от Сентябрь 14, 2006, 08:31
Люди, спасибо за ответы! Будем пробовать.


Название: Закрыть диалог из init()
Отправлено: QCasper от Сентябрь 14, 2006, 09:19
не, ну "delete this" это сильно  :D


Название: Закрыть диалог из init()
Отправлено: Vilgeforce от Сентябрь 14, 2006, 09:26
Цитата: "QCasper"
не, ну "delete this" это сильно  :D


Да я уж и так и так... Дай, думаю, попробую. Не вышло :-)


Название: Закрыть диалог из init()
Отправлено: Alex03 от Сентябрь 14, 2006, 14:30
А QApplication::postEvent ( QObject * receiver, QEvent * event )
не устраит?


Название: Закрыть диалог из init()
Отправлено: Vilgeforce от Сентябрь 14, 2006, 14:34
Ща документации под рукой нет, так что спрошу - какой QEvent надо послать диалогу в данном случае?


Название: Закрыть диалог из init()
Отправлено: bigirbis от Сентябрь 14, 2006, 14:56
Ребят, несерьезно слать QEvent из конструктора диалога дабы застрелить этот диалог. Могут быть различия от одной реализации к другой. Исключение лучший вариант.

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


Название: Закрыть диалог из init()
Отправлено: Grigory от Сентябрь 15, 2006, 16:12
есть еще такая функция, как deleteLater()


Название: Закрыть диалог из init()
Отправлено: Alex03 от Сентябрь 23, 2006, 12:48
Цитата: "bigirbis"
Ребят, несерьезно слать QEvent из конструктора диалога дабы застрелить этот диалог. Могут быть различия от одной реализации к другой. Исключение лучший вариант.

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


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

А вот исключения не факт!
Сама Qt как известно исключения не пользует, и бросать исключения из конструктора класса порождённого от Qt-эшного я бы поостерёгся.
Да и троллтех не советует бросать исключения сквозь их код.


Название: Закрыть диалог из init()
Отправлено: bigirbis от Сентябрь 24, 2006, 13:06
По поводу исключений в Qt - отрицательных эмоций не испытываю, ибо если нормально код написан, все работант превосходно ( по крайней мере в четверке ).