На этом шаге рассмотрим создание нестандартного окна виджета.
Класс QWidget, как и класс QPixmap, содержит метод setMask(). С его помощью можно установить маску и сделать окно виджета не квадратным, а любой другой формы. Эту возможность демонстрирует программа, окно которой показано на рис. 1.
Рис.1. Пример нестандартного окна программы
class Window : public QLabel { private: QPoint m_ptPosition; protected: /*для окна без заголовка нужно позаботиться о возможности его перемещения. Для этого в классе Window переопределяются методы событий мыши mousePressEvent() и mouseMoveEvent(), реализуя тем самым код, необходимый для изменения расположения окна на экране. Атрибут m_ptPosition нужен для хранения координат указателя мыши относительно начала окна виджета*/ virtual void mousePressEvent(QMouseEvent* pe) { m_ptPosition = pe->pos(); } virtual void mouseMoveEvent(QMouseEvent* pe) { move(pe->globalPos() - m_ptPosition); } public: /*для того чтобы убрать заголовок окна, мы передаем в конструктор QLabel значение модификации свойства окна Qt::FramelessHint*/ Window(QWidget* pwgt = 0) : QLabel(pwgt, Qt::FramelessWindowHint | Qt::Window) { } }; int main(int argc, char** argv) { QApplication app(argc, argv); //создается объект класса Window Window win; //в объект pix загружается файл растрового изображения QPixmap pix(":/images/image1.png"); win.setPixmap(pix); /*вызовом метода setPixmap() устанавливается изображение, что можно сделать благодаря тому, что наш класс Window унаследован от QLabel*/ win.setMask(pix.mask()); win.show(); return app.exec(); }
Файлы приложения можно взять Предыдущий шаг
Содержание
Следующий шаг