Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
radislav72 |
9.4.2010, 8:05
Сообщение
#1
|
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 1.4.2010 Пользователь №: 1585 Спасибо сказали: 0 раз(а) Репутация: 0
|
Помогите с такой проблемой.
Есть дилог - потомок QDialog, создан в дизайнере QTCreatorа. В нем переопределен обработчик события closeEvent: Реализация closeEvent такая: Сам диалог показывается таким образом: На диалоге есть buttonBox с кнопками ОК и Отмена. Нужно сделать так, чтобы при нажатии ОК проверялись данные формы, и если они не правильны, выдавалось сообщение и диалог не закрывался. Если нажимается Отмена- диалог закрывается по-любому. По идее, в приведенном коде диалог не должен закрыться. Но он закрывается. И сообщение "CloseEvent!" вообще никогда не показывается. Почему? В чем ошибка? Если делать так для MainWindow, все работает прекрасно. Уже второй день мучаюсь |
|
|
|
|
kwisp |
9.4.2010, 8:27
Сообщение
#2
|
|
астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23
|
radislav72,
читай внимательнее про QDialog тебе вообще по идее не нужен closeEvent нужно лишь переопределить 2 слота accept() && reject() |
|
|
|
|
Litkevich Yuriy |
9.4.2010, 8:29
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(radislav72 @ 9.4.2010, 12:05) Link e->ignore(); это первое, что бросилось в глаза, даже не читая самого сообщения.QDialog::closeEvent(e); Ты либо игнорируешь событие, либо передаёшь его обработку в базовый класс. Для того, чтобы событие закрытия не произошло, нужно игнорировать. И вообще тебе этот обработчик не нужен для того, чтобы отслеживать "Ок". Нужно просто переопределить слот accept() kwisp, опередил |
|
|
|
|
kwisp |
9.4.2010, 8:29
Сообщение
#4
|
|
астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23
|
Цитата(radislav72 @ 9.4.2010, 9:05) Link И сообщение "CloseEvent!" вообще никогда не показывается. Почему? В чем ошибка? попробуй ради интересу не на кнопки "Ок" "Отмена" понажимать, а на крестик закрытия окна. что получится? |
|
|
|
|
radislav72 |
9.4.2010, 10:45
Сообщение
#5
|
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 1.4.2010 Пользователь №: 1585 Спасибо сказали: 0 раз(а) Репутация: 0
|
Большое спасибо за подсказки!
Все решилось очень просто А в предыдущем неправильном варианте: * лишней была строка * при нажатии на стандартную кнопку закрытия окна в верх. прав. углу событие действительно возникало |
|
|
|
|
Litkevich Yuriy |
9.4.2010, 10:55
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(radislav72 @ 9.4.2010, 14:45) Link this->rejected(); тогда окно закроется, просто с другим кодом возврата (результата), нужно просто return делать, если хочешь, чтобы окно оставалось открытым
|
|
|
|
|
radislav72 |
9.4.2010, 11:45
Сообщение
#7
|
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 1.4.2010 Пользователь №: 1585 Спасибо сказали: 0 раз(а) Репутация: 0
|
Исправлю себя:
Так работает хорошо вроде |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 9.2.2026, 6:38 |