Создание нестандартного окна виджета

   
На этом шаге рассмотрим создание нестандартного окна виджета.

   
Класс 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();
}

   
Файлы приложения можно взять Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий