Название: Закрыть диалог из 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 - отрицательных эмоций не испытываю, ибо если нормально код написан, все работант превосходно ( по крайней мере в четверке ).
|