DtkWidget
DTK Widget module
|
用于实现主窗口或控件背景的实时模糊效果. 更多...
Public 类型 | |
enum | BlurMode { GaussianBlur } |
enum | BlendMode { InWindowBlend , BehindWindowBlend , InWidgetBlend } |
enum | MaskColorType { DarkColor , LightColor , AutoColor , CustomColor } |
Public 槽 | |
void | setRadius (int radius) |
DBlurEffectWidget::setRadius radius 模糊区域的圆角大小 如果设定值和原值不一致会发送信号radiusChanged | |
void | setMode (BlurMode mode) |
DBlurEffectWidget::setMode mode 设定模糊算法,默认为高斯模糊算法GaussianBlur | |
void | setBlendMode (BlendMode blendMode) |
DBlurEffectWidget::setBlendMode blendMode 窗口混合模式,模式设定变化发送blendModeChanged信号 | |
void | setBlurRectXRadius (int blurRectXRadius) |
DBlurEffectWidget::setBlurRectXRadius blurRectXRadius 模糊区域矩形的X圆角大小 | |
void | setBlurRectYRadius (int blurRectYRadius) |
DBlurEffectWidget::setBlurRectYRadius blurRectYRadius 模糊区域矩形的Y圆角大小 | |
void | setMaskAlpha (quint8 alpha) |
DBlurEffectWidget::setMaskAlpha alpha 设置Alpha通道,值变化发送maskAlphaChanged信号 | |
void | setMaskColor (QColor maskColor) |
DBlurEffectWidget::setMaskColor maskColor 设定mask的颜色 | |
void | setMaskColor (MaskColorType type) |
设置控件的颜色模式,默认值为 MaskColorType::CustomColor type | |
void | setFull (bool full) |
DBlurEffectWidget::setFull full 设置时候模糊区域占满整个窗口大小 | |
void | setBlurEnabled (bool blurEnabled) |
DBlurEffectWidget::setBlurEnabled blurEnabled 设定模糊区域是否可以伸缩 | |
void | updateBlurSourceImage (const QRegion &ren) |
DBlurEffectWidget::updateBlurSourceImage ren 设定模糊区域的背景图片 | |
信号 | |
void | radiusChanged (int radius) |
信号会在 radius 属性的值改变时被发送 | |
void | modeChanged (BlurMode mode) |
信号会在 mode 属性的值改变时被发送. | |
void | blendModeChanged (BlendMode blendMode) |
信号会在 blendMode 属性的值改变时被发送 | |
void | blurRectXRadiusChanged (int blurRectXRadius) |
信号会在 blurRectXRadius 属性的值改变时被发送 | |
void | blurRectYRadiusChanged (int blurRectYRadius) |
信号会在 blurRectYRadius 属性的值改变时被发送 | |
void | maskAlphaChanged (quint8 alpha) |
信号会在 alpha 属性的值改变时被发送 | |
void | maskColorChanged (QColor maskColor) |
信号会在 maskColor 属性的值改变时被发送 | |
void | fullChanged (bool full) |
void | blurEnabledChanged (bool blurEnabled) |
void | blurSourceImageDirtied () |
Public 成员函数 | |
DBlurEffectWidget (QWidget *parent=0) | |
DBlurEffectWidget::DBlurEffectWidget constructs an instance of DBlurEffectWidget. | |
int | radius () const |
This property holds the radius of the blur effect. | |
BlurMode | mode () const |
This property holds which blur algorithm to be used. | |
BlendMode | blendMode () const |
This property holds which mode is used to blend the widget and its background scene. | |
int | blurRectXRadius () const |
This property holds the xRadius of the effective background. | |
int | blurRectYRadius () const |
This property holds the yRadius of the effective background. | |
bool | isFull () const |
DBlurEffectWidget::isFull | |
bool | blurEnabled () const |
DBlurEffectWidget::blurEnabled | |
QColor | maskColor () const |
This property holds the background color of this widget. | |
quint8 | maskAlpha () const |
void | setMaskPath (const QPainterPath &path) |
DBlurEffectWidget::setMaskPath set custom area as the effective background. | |
void | setSourceImage (const QImage &image, bool autoScale=true) |
DBlurEffectWidget::setSourceImage image autoScale | |
Protected 成员函数 | |
DBlurEffectWidget (DBlurEffectWidgetPrivate &dd, QWidget *parent=0) | |
void | paintEvent (QPaintEvent *event) Q_DECL_OVERRIDE |
void | moveEvent (QMoveEvent *event) Q_DECL_OVERRIDE |
void | resizeEvent (QResizeEvent *event) Q_DECL_OVERRIDE |
void | showEvent (QShowEvent *event) Q_DECL_OVERRIDE |
void | hideEvent (QHideEvent *event) Q_DECL_OVERRIDE |
void | changeEvent (QEvent *event) Q_DECL_OVERRIDE |
bool | eventFilter (QObject *watched, QEvent *event) override |
属性 | |
int | radius |
模糊效果计算时的取样范围,模糊的原理为:将此像素点和周围像素点合成计算得到得到新的值, 此属性表示像素点周围 radius 距离的所有像素点参与计算 | |
BlurMode | mode |
所采用的模糊算法,默认值为 GaussianBlur | |
BlendMode | blendMode |
模糊的应用场景,默认会根据有没有父控件自动判断使用哪种模式 | |
int | blurRectXRadius |
模糊区域在x轴方向上的圆角半径,默认值为0 | |
int | blurRectYRadius |
模糊区域在y轴方向上的圆角半径,默认值为0 | |
QColor | maskColor |
画在控件模糊背景之上的颜色,此颜色的alpha通道值会被 maskAlpha 属性影响 修改此属性会自动将颜色模式设置为 CustomColor,设置后将不能再自动根据窗口管理器是否 支持混成和模糊来自动使用最佳的颜色 | |
quint8 | maskAlpha |
maskColor 的alpha通道值。当前窗口管理器支持混成(窗口背景透明)时默认值为102,否则为204 | |
bool | full |
如果值为true,将模糊此控件所在顶层窗口的整个背景,而无论控件的大小和位置,否则使用控件的位置和大小 设置顶层窗口的模糊区域。需要注意的时,当控件本身就是顶层窗口且未设置 blurRectXRadius 和 blurRectYRadius 属性的情况下,无论 full 属性的值为多少,都将和值为 true 时的行为保持一致。 | |
bool | blurEnabled |
如果值为 true 则此控件的模糊设置生效,否则不生效 | |
友元 | |
class | DBlurEffectGroup |
用于实现主窗口或控件背景的实时模糊效果.
\inmodule dtkwidget
The DBlurEffectWidget class provides widget that backgrounds are blurred and semitranslucent.
分为主窗口模糊 DBlurEffectWidget::BehindWindowBlend 和控件模糊 DBlurEffectWidget::InWindowBlend DBlurEffectWidget::InWindowBlend 这两种不同的模式,主窗口模糊效果依赖于窗口管理器的实现,目前仅支持 deepin-wm 和 kwin, 可以使用DWindowManagerHelper::hasBlurWindow 判断当前运行环境中的窗口管理器是否支持 模糊特效,使用 DPlatformWindowHandle::setWindowBlurAreaByWM 设置主窗口背景的模糊 区域。如果在一个主窗口内同时使用了多个 DBlurEffectWidget 控件,则在更新主窗口模糊区域 时会自动将所有控件的区域合并到 QVector<WMBlurArea> 或者 QList<QPainterPath> (如果有任意一个控件设置了 DBlurEffectWidget::radius 属性)中统一设置。 控件模糊效果的原理和 DClipEffectWidget 类似,在控件绘制时先使用 QPlatformBackingStore::toImage() 获取主窗口上控件对应区域内已经绘制的内容,此时获取的内容为此控件下层控件所绘制的内容,将 获得的 QImage 对象使用软件算法进行模糊处理,然后再将模糊之后的图像绘制到控件上。由于实现 原理限制,不适用于主窗口为OpenGL绘制模式的窗口(如:QOpenGLWindow ),且控件下面使用 OpenGL绘制的内容也生成模糊的效果(如 QOpenGLWidget )
DBlurEffectWidget is QWidget that has blurry background. With different blend mode set, DBlurEffectWidget can do in-window-blend, which means the the widget is blended with the widgets between the top level window and the widget itself, and behind-window-blend, which means the widget is blended with the scene behind the window (with the help of WM).
The effect has optional styles can choose from: DBlurEffectWidget::DarkColor, DBlurEffectWidget::LightColor, and DBlurEffectWidget::CustomColor. Usually the first two are sufficient, you can also choose CustomColor and set the color you want by setting DBlurEffectWidget::maskColor.
DBlurEffectWidget::BlendMode 模糊模式
枚举值 | |
---|---|
InWindowBlend | 以窗口内部控件作为模糊背景 |
BehindWindowBlend | 以外部的其它窗口作为模糊背景 |
InWidgetBlend | 同 DBlurEffectWidget::InWindowBlend,区别是不会自动更新用于模糊的源图片 可手动调用 DBlurEffectWidget::updateBlurSourceImage 更新,以此来实现自行控制模糊 源图片的更新时机 |
DBlurEffectWidget::BlurMode 模糊算法
\value GaussianBlur \l {https://zh.wikipedia.org/wiki/高斯模糊}{高斯模糊算法}
|
explicit |
DBlurEffectWidget::DBlurEffectWidget constructs an instance of DBlurEffectWidget.
和普通控件使用方式一样,可以作为任何控件的子控件。默认会开启 Qt::WA_TranslucentBackground, 必须设置控件为背景透明,否则控件所在区域的内容重绘时,在此控件下方的区域不会被下层控件重新绘制
parent is passed to QWidget constructor. parent 当父对象为空时,默认使用 DBlurEffectWidget::BehindWindowBlend 模式,否则使用 DBlurEffectWidget::InWindowBlend 模式
bool Dtk::Widget::DBlurEffectWidget::blurEnabled | ( | ) | const |
DBlurEffectWidget::blurEnabled
int Dtk::Widget::DBlurEffectWidget::blurRectXRadius | ( | ) | const |
This property holds the xRadius of the effective background.
The xRadius and yRadius specify the radius of the ellipses defining the corners of the effective background.
int Dtk::Widget::DBlurEffectWidget::blurRectYRadius | ( | ) | const |
This property holds the yRadius of the effective background.
The xRadius and yRadius specify the radius of the ellipses defining the corners of the effective background.
bool Dtk::Widget::DBlurEffectWidget::isFull | ( | ) | const |
|
signal |
信号会在 alpha 属性的值改变时被发送
QColor Dtk::Widget::DBlurEffectWidget::maskColor | ( | ) | const |
This property holds the background color of this widget.
It returns predefined colors if the DBlurEffectWidget::maskColorType is set to DBlurEffectWidget::DarkColor or BlurEffectWidget::LightColor, returns the color set by DBlurEffectWidget::setMaskColor if DBlurEffectWidget::maskColorType is set to BlurEffectWidget::CustomColor.
DBlurEffectWidget::BlurMode Dtk::Widget::DBlurEffectWidget::mode | ( | ) | const |
This property holds which blur algorithm to be used.
Currently it only supports DBlurEffectWidget::GaussianBlur.
int Dtk::Widget::DBlurEffectWidget::radius | ( | ) | const |
This property holds the radius of the blur effect.
void Dtk::Widget::DBlurEffectWidget::setMaskPath | ( | const QPainterPath & | path | ) |
DBlurEffectWidget::setMaskPath set custom area as the effective background.
设置模糊区域的路径,当未调用过此接口时,模糊区域为整个控件所占据的空间,此路径坐标原点为控件左上角
path a QPainterPath to be used as the effectvie background.
void Dtk::Widget::DBlurEffectWidget::setSourceImage | ( | const QImage & | image, |
bool | autoScale = true |
||
) |
DBlurEffectWidget::setSourceImage image autoScale
|
readwrite |
模糊的应用场景,默认会根据有没有父控件自动判断使用哪种模式
|
readwrite |
如果值为 true 则此控件的模糊设置生效,否则不生效
|
readwrite |
模糊区域在x轴方向上的圆角半径,默认值为0
|
readwrite |
模糊区域在y轴方向上的圆角半径,默认值为0
|
readwrite |
如果值为true,将模糊此控件所在顶层窗口的整个背景,而无论控件的大小和位置,否则使用控件的位置和大小 设置顶层窗口的模糊区域。需要注意的时,当控件本身就是顶层窗口且未设置 blurRectXRadius 和 blurRectYRadius 属性的情况下,无论 full 属性的值为多少,都将和值为 true 时的行为保持一致。
|
readwrite |
|
readwrite |
画在控件模糊背景之上的颜色,此颜色的alpha通道值会被 maskAlpha 属性影响 修改此属性会自动将颜色模式设置为 CustomColor,设置后将不能再自动根据窗口管理器是否 支持混成和模糊来自动使用最佳的颜色
|
readwrite |
所采用的模糊算法,默认值为 GaussianBlur
|
readwrite |
模糊效果计算时的取样范围,模糊的原理为:将此像素点和周围像素点合成计算得到得到新的值, 此属性表示像素点周围 radius 距离的所有像素点参与计算