Проблема с closeEvent |
Здравствуйте, гость ( Вход | Регистрация )
Проблема с closeEvent |
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 |
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, 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, 11:45
Сообщение
#7
|
Студент Группа: Новичок Сообщений: 11 Регистрация: 1.4.2010 Пользователь №: 1585 Спасибо сказали: 0 раз(а) Репутация: 0 |
Исправлю себя:
Так работает хорошо вроде |
|
|
Текстовая версия | Сейчас: 29.3.2024, 8:58 |