Developer Tales or everything about everything

16Янв/141

Перемещение окна без заголовка с помощью мыши

Что делать, если хочется сделать красивое окно с помощью всех возможностей стилизации Qt и нужно убрать стандартный каркас окна операционной системы?

С кнопками "Свернуть", "Развернуть во весь экран", "Закрыть" все ясно - просто добавляет кнопки с такой же функциональностью в QToolBar или в любое другое место в окне.

Но остается еще одна задача - научить мышь перемещать окно, ведь окно, которое нельзя сдвинуть - это просто ужас для любого пользователя.

StackOverflow подсказывает одно из самых удачных решений, однако, автор лучшего поста не учел одну вещь: если в окне имеется QToolBar, или любая кнопка типа QPushButton, то появится неприятный баг: если нажать кнопку мыши на кнопке, и затем переместить курсор в свободную область окна, то окно начнет прыгать по экрану.

Поэтому, помимо mousePressEvent(MouseEvent*) и mouseMoveEvent(MouseEvent*), нужно добавить еще один обработчик событий: mouseReleaseEvet(QMouseEvent*).

В mouseReleaseEvent необходимо дать понять окну, что нажатие мыши произошло не в свободной области окна и двигать окно нет необходимости.


Обнуление значений mpos в событии mouseReleaseEvent обеспечивает вменяемое поведение окна при нажатии на кнопки.
Просмотров: 3058
Комментарии (1) Пинги (0)
  1. Спасибо за статью , очень помогла!)http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_good.gif


Leave a comment


один + = 5

http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_bye.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_good.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_negative.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_scratch.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_wacko.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_yahoo.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_cool.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_heart.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_rose.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_smile.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_whistle3.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_yes.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_cry.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_mail.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_sad.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_unsure.gif 
http://microfork.com/wp-content/plugins/wp-monalisa/icons/wpml_wink.gif 
 

Trackbacks are disabled.