Название: Обработка кнопки "крестик" Отправлено: abodnya от Апрель 20, 2013, 01:15 Вступление:
пишу ImageViewer с функциями редактирования. При редактировании устанавливаю флаг, что изображение было отредактировано. Соответственно при переходе к другой картинке выдаю MessageBox о том, что "файл отредактирован, сохранить изменения или нет?". Также сделал в меню пункт "Выйти" при нажатии по которому запускается функция close() главного окна, которую я перегрузил, добавив туда проверку флага "редактировано/не редактировано". Проблема: При нажатии в меню пункта "выйти" функция close() нормально отрабатывает. Но если выходить нажимая "крестик", то close() игнорируется и программа моментально закрывается не сохранив изменений. По сабжу: Как перегрузить нажатие кнопки "крестик"? Название: Re: Обработка кнопки "крестик" Отправлено: Bepec от Апрель 20, 2013, 07:14 closeEvent у виджета переопределяли? Даже если закрывать из диспетчера задач, событие должно приходить (в windows).
PS и пора бы наверно добавить в профиль пользователя данные аля "версия Qt, ОС". Название: Re: Обработка кнопки "крестик" Отправлено: abodnya от Апрель 20, 2013, 15:17 Спасибо. Это помогло.
Теперь другой вопрос. Посл нажатия "крестика" фокус не попадает на MessageBox. Как заставить его при выходе передавать фокус MessageBox-у? Код: void QImageViewer::closeEvent(QCloseEvent *) Название: Re: Обработка кнопки "крестик" Отправлено: Bepec от Апрель 20, 2013, 15:42 Мая ваша не понимайт.
Мессадж выскакивает над виджетом. Соответственно никакого фокуса и быть не может - единственно активная часть вашей программы - мессадж. Название: Re: Обработка кнопки "крестик" Отправлено: abodnya от Апрель 20, 2013, 16:00 Чтобы немного прояснить, прикладываю скрины:
1) Закрытие окна пунктом меню. Фокус передался MessageBox 2) Закрытие окна "крестиком". Фокус пропал. Убунта говорит, что фокус на рабочем столе сейчас http://vk.com/doc8911610_174737012?dl=b748b01bfd644b4256 http://vk.com/doc8911610_174737177?dl=b748b01bfd644b4256 Название: Re: Обработка кнопки "крестик" Отправлено: VPS от Апрель 20, 2013, 16:41 Не помешал бы минимальный проект с проблемой...
П.С.: На kubuntu метод closeEvent нормально отрабатывает... Обычно при нажатии на "Cancel" в диалоге, должно отмениться запланированное действие. В Вашей же реализации окно всё-равно закроется... Название: Re: Обработка кнопки "крестик" Отправлено: Bepec от Апрель 20, 2013, 17:01 Научитесь выкладывать скрины не в приватные альбомы :D Это раз.
Во вторых, я работаю с виндой и по поводу убунты-кубунты ничем помочь не могу. Возможно это работа вашего оконного менеджера, а не программы. PS что мог я сделал, что не смог - попытался :D Название: Re: Обработка кнопки "крестик" Отправлено: abodnya от Апрель 20, 2013, 18:16 Упс )
Вот, перезалил: http://i48.fastpic.ru/big/2013/0420/d7/6c3fa6f1935df039f9a1df74c37babd7.png http://i48.fastpic.ru/big/2013/0420/95/fe8321ecd632bf3cd5aa34e4a6a82895.png Сам проект слил сюда: http://us.ua/1098015/ Под виндой еще не тестировал, может там такой проблемы не будет Название: Re: Обработка кнопки "крестик" Отправлено: kambala от Апрель 20, 2013, 18:27 вместо exit(0) нормальные люди пишут event->accept(), а при нажатии на отмену — event->ignore()
Название: Re: Обработка кнопки "крестик" Отправлено: abodnya от Апрель 20, 2013, 18:33 Ну я ж пока только учусь)
Кстати говоря, если перегружать closeEvent (аналогично пробывал и paintEvent) в теле класса производного, от QWidget, event-а нету в параметрах =(. Т.е. функция принимает вид void QImageViewer::closeEvent(QCloseEvent *) Подскажите как правильно перегрузить так, чтоб event был. В другом классе, который наследовал от QGraphicsView, event как параметр был. Название: Re: Обработка кнопки "крестик" Отправлено: Alex Custov от Апрель 20, 2013, 19:23 начни с изучения С++. При объявлении метода в классе имя параметра можно не указывать, достаточно его тип, т.е. QCloseEvent *
Название: Re: Обработка кнопки "крестик" Отправлено: abodnya от Апрель 20, 2013, 19:30 примерно догадывался.
Суть в том, почему при наследовании от QGraphicsView "event" как параметр предлагается, а при наследовании от QWidget предлагается только тип класса "QCloseEvent *". Название: Re: Обработка кнопки "крестик" Отправлено: kambala от Апрель 20, 2013, 20:06 мог бы в документации прочитать — там имя переменной указано
Название: Re: Обработка кнопки "крестик" Отправлено: abodnya от Апрель 20, 2013, 20:55 регулярно почитываю документацию за тем или иным вопросом) за всем не уследишь.
Я думаю, тема себя исчерпала. Всем спасибо за ответы Название: Re: Обработка кнопки "крестик" Отправлено: _OLEGator_ от Апрель 20, 2013, 23:31 Офигеть, уже за азбукой на формы лезут - извиняюсь за свою нетерпимость по этому вопросу.
Ну как так можно, не зная основ С++ куда-то двигаться дальше на шару. Пойду просить бОльшую зарплату, после таких вопросов на форуме ощущаешь себя более ценным специалистом)) Название: Re: Обработка кнопки "крестик" Отправлено: abodnya от Апрель 21, 2013, 00:16 Естественно я чего-то могу не знать, или недопонять. Что в этом страшного?
К слову, на плюсах пишу уже около года, на кьюте около полугода. Чистый Си начал учить чуть больше года назад. Название: Re: Обработка кнопки "крестик" Отправлено: Alex Custov от Апрель 21, 2013, 00:48 Название: Re: Обработка кнопки "крестик" Отправлено: abodnya от Апрель 21, 2013, 00:57 читал для начала статьи Александра Фенстера + по нужным вопросам форумы и мануалы.
Предпочитаю "на ходу" все подучивать, на практике |