Pull to refresh

Создание смазывания фона под окном в Windows

Reading time 2 min
Views 3.8K
Original author: Jens
Буквально вчера в блогах разработчиков Qt был опубликован топик, в котором описывалось как можно создать эффект размытия фона под окном приложения в Windows Vista и Windows 7.


Начиная с версии Qt 4.5 мы добавили поддержку прозрачности, включить которую можно выставив атрибут Qt::WA_TranslucentBackground. К сожалению, согласно документации, это будет работать только в Windows, если вы явно уберете декорацию окон.
Начиная с Windows Vista, Microsoft представила DWM (Desktop Window Manager) api, где вы можете включить эффект размытия под окном вашего приложения. К сожалению Qt еще не имеет API покрывающего эти возможности, но используя вышеупомянутый атрибут в комбинации в несколькими нативными API вызовами вы может уже сейчас получить этот эффект.



Для облегчения я создал удобный механизм для осуществления необходимых вызовов, который вы можете включить в свой существующий код. Замечу, что код обязан компилироваться и на других платформах:

bool QtWin::isCompositionEnabled()
bool QtWin::enableBlurBehindWindow(QWidget *widget, bool enable)
bool QtWin::extendFrameIntoClientArea(QWidget *widget, int left, int top, int right, int bottom)
QColor QtWin::colorizationColor()


* This source code was highlighted with Source Code Highlighter.


Вы можете сделать widget смазанным вызвав метод enableBlurBehindWindow или extendFrameIntoClientArea c установленными отступами. В обоих случаях вы с легкостью модифицируете фон widget-а. Метод colorizationColor вернет цвет, который используется для раскраски окон в системе.

Для демонстрации эффекта я сделал (еще один!) 200-строчный Qt браузер (ориг: 200-line Qt browser). Он имеет модифицированную таблицу стилей с полупрозрачными widget-ами. Вы можете также посмотреть, как можно сделать сегментированные кнопки со стрелочками, используя лишь пару таблиц стилей.

Код и рабочий пример можно взять отсюда.
Код отдельно доступен здесь.



Счастливого программирования!
Tags:
Hubs:
+21
Comments 30
Comments Comments 30

Articles