![]() |
|
![]() ![]() ![]() |
|
GrishinUS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.9.2006 Где: Самара Репутация: нет Всего: нет |
Добрый день!
Есть объект, в конструкторе которого проверяются некие условия. Если условия не выполняются нужно вывести сообщение и закрыть форму.
вообще реально удалить самого себя из конструктора? Или же нужно генерировать сигнал родителю чтоб он удалял объект? |
|||
|
||||
feanor59 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 24.1.2008 Где: Пермь Репутация: нет Всего: нет |
если завершить конструктор по исключению, то объект создан не будет.
а удалить себя из конструктора нельзя, т. к. до его (конструктора) корректного завершения объект не создаётся. Это сообщение отредактировал(а) feanor59 - 31.10.2008, 09:32 |
|||
|
||||
GrishinUS |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.9.2006 Где: Самара Репутация: нет Всего: нет |
добавил
теперь вся прога завершается, а мне нужно чтобы только диалог DoOutImpl Это сообщение отредактировал(а) GrishinUS - 31.10.2008, 11:03 |
||||
|
|||||
VK_Techno |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 29.9.2007 Репутация: нет Всего: нет |
Теперь каждый вызов конструктора DoOutImpl вкладывай в блок try/catch, лови исключение типа int и обрабатывай его, например, показав пользователю сообщение об ошибке.
|
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Вообще не самая светлая идея прописывать проверки в конструкторе. Лучше его оставить пустым и создать метод Initialization(), который и вызывать после того как объект создан.
Представь, если бы разработчики Qt пользовались таким методом ? Скажем конструктор QString выкинет исключение, а ты даже не прописал блок try{}catch(...){}. Это сообщение отредактировал(а) SABROG - 31.10.2008, 15:08 |
|||
|
||||
mes |
|
||||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
Согласен.
вынесите условие из кнструктора, и проверяйте его перед показом диалога , типа такого :
Это сообщение отредактировал(а) mes - 31.10.2008, 15:58 |
||||||
|
|||||||
GrishinUS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.9.2006 Где: Самара Репутация: нет Всего: нет |
OK, понял. |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Ни в коем случае следуйте такому подходу! Это подход MFC
![]() ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
||||
|
||||
GrishinUS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.9.2006 Где: Самара Репутация: нет Всего: нет |
А можно попросить ![]() |
|||
|
||||
GrishinUS |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.9.2006 Где: Самара Репутация: нет Всего: нет |
а как это будет выглядеть в терминах exec и close?
код выше никак не влияет на видимость диалога :( Это сообщение отредактировал(а) GrishinUS - 1.11.2008, 14:29 |
||||||||||
|
|||||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 7 Всего: 250 |
диалог же у Вас модальный? все проверки/действия должны быть выполнены до/в exec(). ну "после драки кулаками не машут"©. Вы перейдете к следующей строчке за OuterForm.exec() тогда, когда покинете форму диалога, а скрывать ее на тот момент уже смысла нет ![]() В обшем или перегружаете метод exec () так, как Вам нужно или вызываете его по условию. (выбор способа зависит от самой задачи) Это сообщение отредактировал(а) mes - 1.11.2008, 15:02 |
|||
|
||||
GrishinUS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.9.2006 Где: Самара Репутация: нет Всего: нет |
сделал вызов exec() по условию. Помечаю вопрос как решенный.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |