Эффекты прозрачности для окон в Qt

Эффекты прозрачности для окон в Qt

Продолжим работу над примером Qt-виджета с нестандартной рамкой. Сделаем окно полу-прозрачным. Для этого достаточно воспользоваться функцией QWidget::setWindowOpacity(). Добавим ее вызов в конструктор виджета:

В результате получаем:

semi-transparent-widget-qt-thumbnail

Но давайте пойдем дальше. Мы можем придать нашему окну произвольную форму, установив для него битовую маску. В качестве примера воспользуемся формой «облака с текстом» (прикрепленное изображение немного модифицировано, поэтому напрямую использоваться не может; рабочую маску можно загрузить вместе с исходниками по ссылке в конце статьи):

speech-bubble-mask

Изображение-маска формируется таким оразом, чтобы лишняя часть была полностью прозрачной (в соответствии с альфа-каналом). Все непрозрачные части изображения определяют форму окна. При этом цвет пикселей значения не имеет.

Для задания маски виджету необходимо:

  1. Загрузить изображение в виде QPixmap;
  2. Смасштабировать изображение по размеру окна;
  3. Извлечь маску изображения и установить ее для окна.

Добавим соответствующий код в конструктор DraggableWidget:

Получаем довольно интересный результат:

bubble-message-widget-qt-thumbnail

Выводы

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

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