QWidget с нестандартной рамкой: Создаем декоративное окно

QWidget с нестандартной рамкой: Создание декоративного окна

Разработаем простой Qt-виджет с нестандартной строкой заголовка. Пока что ограничимся лишь функционалом. Украшательства добавляются с помощью стилей (оставим их на другой раз). В итоге у нас выйдет что-то подобное:

draggable-widget-demo

Визуально получить представленный результат очень просто. Достаточно инициализировать наш виджет в конструкторе следующим образом:

Важный момент здесь заключается в указании флагов окна: Qt::Window | Qt::FramelessWindowHint. Все остальное сводится к правильной компоновке элементов на форме.

Для кнопки в правом верхнем углу я включил flat-режим через Qt Designer, чтобы она лучше вписывалась в интерфейс. При этом сигнал нажатия кнопки clicked() привязывается к слоту quit() для приложения.

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

Добавим обработчики событий мыши:

Немного геометрических расчетов и окно можно двигать. В mousePressEvent() фиксируем начальное положение курсора в системе координат виджета. В mouseMoveEvent() меняем глобальные координаты окна так, чтобы курсор мыши всегда оставался на том же расстоянии от левого верхнего угла виджета.

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий