DtkWidget
DTK Widget module
载入中...
搜索中...
未找到
Dtk::Widget::DBlurEffectWidget类 参考

用于实现主窗口或控件背景的实时模糊效果. 更多...

类 Dtk::Widget::DBlurEffectWidget 继承关系图:
Dtk::Widget::DToolbarEditPanel

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 with BehindWindowBlend mode will become opaque if WM supports no X11 composite protocol.

成员枚举类型说明

◆ BlendMode

DBlurEffectWidget::BlendMode 模糊模式

枚举值
InWindowBlend 

以窗口内部控件作为模糊背景

BehindWindowBlend 

以外部的其它窗口作为模糊背景

InWidgetBlend 

同 DBlurEffectWidget::InWindowBlend,区别是不会自动更新用于模糊的源图片 可手动调用 DBlurEffectWidget::updateBlurSourceImage 更新,以此来实现自行控制模糊 源图片的更新时机

◆ BlurMode

构造及析构函数说明

◆ DBlurEffectWidget()

Dtk::Widget::DBlurEffectWidget::DBlurEffectWidget ( QWidget *  parent = 0)
explicit

DBlurEffectWidget::DBlurEffectWidget constructs an instance of DBlurEffectWidget.

和普通控件使用方式一样,可以作为任何控件的子控件。默认会开启 Qt::WA_TranslucentBackground, 必须设置控件为背景透明,否则控件所在区域的内容重绘时,在此控件下方的区域不会被下层控件重新绘制

parent is passed to QWidget constructor. parent 当父对象为空时,默认使用 DBlurEffectWidget::BehindWindowBlend 模式,否则使用 DBlurEffectWidget::InWindowBlend 模式

成员函数说明

◆ blurEnabled()

bool Dtk::Widget::DBlurEffectWidget::blurEnabled ( ) const

DBlurEffectWidget::blurEnabled

返回
true 模糊区域可伸缩调整

◆ blurRectXRadius()

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.

参见
DBlurEffectWidget::blurRectYRadius

◆ blurRectYRadius()

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.

参见
DBlurEffectWidget::blurRectXRadius

◆ isFull()

bool Dtk::Widget::DBlurEffectWidget::isFull ( ) const

DBlurEffectWidget::isFull

返回
 true 窗口占据了整个模糊区域,反之为false

◆ maskAlphaChanged

void Dtk::Widget::DBlurEffectWidget::maskAlphaChanged ( quint8  alpha)
signal

信号会在 alpha 属性的值改变时被发送

参见
DBlurEffectWidget::maskAlpha

◆ maskColor()

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.

◆ mode()

DBlurEffectWidget::BlurMode Dtk::Widget::DBlurEffectWidget::mode ( ) const

This property holds which blur algorithm to be used.

Currently it only supports DBlurEffectWidget::GaussianBlur.

◆ radius()

int Dtk::Widget::DBlurEffectWidget::radius ( ) const

This property holds the radius of the blur effect.

注解
This property has no effect with the DBlurEffectWidget::blendMode set to DBlurEffectWidget::BehindWindowBlend.

◆ setMaskPath()

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.

警告
设置自定义路径之后,控件大小改变时不会再自动调整模糊区域大小
参见
DBlurEffectWidget::blurRectXRadius DBlurEffectWidget::blurRectYRadius

◆ setSourceImage()

void Dtk::Widget::DBlurEffectWidget::setSourceImage ( const QImage &  image,
bool  autoScale = true 
)

DBlurEffectWidget::setSourceImage image autoScale

警告

属性说明

◆ blendMode

Dtk::Widget::DBlurEffectWidget::blendMode
readwrite

模糊的应用场景,默认会根据有没有父控件自动判断使用哪种模式

注解
可读可写
父对象为空时设置模式为 DBlurEffectWidget::InWindowBlend 没有意义

◆ blurEnabled

Dtk::Widget::DBlurEffectWidget::blurEnabled
readwrite

如果值为 true 则此控件的模糊设置生效,否则不生效

注解
可读可写

◆ blurRectXRadius

Dtk::Widget::DBlurEffectWidget::blurRectXRadius
readwrite

模糊区域在x轴方向上的圆角半径,默认值为0

注解
可读可写
参见
DBlurEffectWidget::blurRectYRadius DBlurEffectWidget::setMaskPath QPainterPath::addRoundedRect

◆ blurRectYRadius

Dtk::Widget::DBlurEffectWidget::blurRectYRadius
readwrite

模糊区域在y轴方向上的圆角半径,默认值为0

注解
可读可写
参见
DBlurEffectWidget::blurRectXRadius DBlurEffectWidget::setMaskPath QPainterPath::addRoundedRect

◆ full

Dtk::Widget::DBlurEffectWidget::full
readwrite

如果值为true,将模糊此控件所在顶层窗口的整个背景,而无论控件的大小和位置,否则使用控件的位置和大小 设置顶层窗口的模糊区域。需要注意的时,当控件本身就是顶层窗口且未设置 blurRectXRadius 和 blurRectYRadius 属性的情况下,无论 full 属性的值为多少,都将和值为 true 时的行为保持一致。

注解
可读可写
此属性不影响蒙版的绘制区域
只在模糊的混合模式为 BehindWindowBlend 或 DBlurEffectWidget::InWindowBlend 时生效
参见
DBlurEffectWidget::blurRectXRadius DBlurEffectWidget::blurRectYRadius
DBlurEffectWidget::maskColor
DBlurEffectWidget::blendMode

◆ maskAlpha

Dtk::Widget::DBlurEffectWidget::maskAlpha
readwrite

maskColor 的alpha通道值。当前窗口管理器支持混成(窗口背景透明)时默认值为102,否则为204

注解
可读可写
参见
DBlurEffectWidget::maskColor

◆ maskColor

Dtk::Widget::DBlurEffectWidget::maskColor
readwrite

画在控件模糊背景之上的颜色,此颜色的alpha通道值会被 maskAlpha 属性影响 修改此属性会自动将颜色模式设置为 CustomColor,设置后将不能再自动根据窗口管理器是否 支持混成和模糊来自动使用最佳的颜色

注解
可读可写
参见
DBlurEffectWidget::blurRectXRadius DBlurEffectWidget::setMaskColor()

◆ mode

Dtk::Widget::DBlurEffectWidget::mode
readwrite

所采用的模糊算法,默认值为 GaussianBlur

注解
可读可写
只在模式为 DBlurEffectWidget::InWindowBlend 时有效

◆ radius

Dtk::Widget::DBlurEffectWidget::radius
readwrite

模糊效果计算时的取样范围,模糊的原理为:将此像素点和周围像素点合成计算得到得到新的值, 此属性表示像素点周围 radius 距离的所有像素点参与计算

注解
可读可写
只在模式为 DBlurEffectWidget::InWindowBlend 时有效

该类的文档由以下文件生成: