DtkGui
DTK Gui module
载入中...
搜索中...
未找到
Dtk::Gui::DPlatformHandle类 参考

一个和Qt dxcb平台插件交互的工具类. 更多...

类 Dtk::Gui::DPlatformHandle 继承关系图:
Dtk::Gui::DPlatformHandle 的协作图:

class  WMBlurArea
 描述窗口背景模糊区域的数据结构,包含位置、大小、圆角半径等信息. 更多...
 

Public 类型

enum  WallpaperScaleMode { FollowScreen = 0x00000000 , FollowWindow = 0x00010000 }
 
enum  WallpaperFillMode { PreserveAspectCrop = 0x00000000 , PreserveAspectFit = 0x00000001 }
 
enum  EffectScene {
  EffectNoRadius = 0x01 , EffectNoShadow = 0x02 , EffectNoBorder = 0x04 , EffectNoStart = 0x10 ,
  EffectNoClose = 0x20 , EffectNoMaximize = 0x40 , EffectNoMinimize = 0x80
}
 
enum  EffectType {
  EffectNormal = 0x01 , EffectCursor = 0x02 , EffectTop = 0x04 , EffectBottom = 0x08 ,
  EffectOut = 0x10
}
 

Public 槽

void setWindowRadius (int windowRadius)
 
void setBorderWidth (int borderWidth)
 
void setBorderColor (const QColor &borderColor)
 
void setWindowEffect (EffectScenes effectScene)
 
void setWindowStartUpEffect (EffectTypes effectType)
 
void setShadowRadius (int shadowRadius)
 
void setShadowOffset (const QPoint &shadowOffset)
 
void setShadowColor (const QColor &shadowColor)
 
void setClipPath (const QPainterPath &clipPath)
 
void setFrameMask (const QRegion &frameMask)
 
void setTranslucentBackground (bool translucentBackground)
 
void setEnableSystemResize (bool enableSystemResize)
 
void setEnableSystemMove (bool enableSystemMove)
 
void setEnableBlurWindow (bool enableBlurWindow)
 
void setAutoInputMaskByClipPath (bool autoInputMaskByClipPath)
 

信号

void frameMarginsChanged ()
 信号会在 frameMargins 属性的值改变时被发送.
 
void windowRadiusChanged ()
 信号会在 windowRadius 属性的值改变时被发送
 
void borderWidthChanged ()
 信号会在 borderWidth 属性的值改变时被发送
 
void borderColorChanged ()
 信号会在 borderColor 属性的值改变时被发送
 
void shadowRadiusChanged ()
 信号会在 shadowRadius 属性的值改变时被发送
 
void shadowOffsetChanged ()
 信号会在 shadowOffset 属性的值改变时被发送
 
void shadowColorChanged ()
 信号会在 shadowColor 属性的值改变时被发送
 
void windowEffectChanged ()
 
void windowStartUpEffectChanged ()
 
void clipPathChanged ()
 信号会在 clipPath 属性的值改变时被发送
 
void frameMaskChanged ()
 信号会在 frameMask 属性的值改变时被发送
 
void translucentBackgroundChanged ()
 信号会在 translucentBackground 属性的值改变时被发送
 
void enableSystemResizeChanged ()
 信号会在 enableSystemResize 属性的值改变时被发送
 
void enableSystemMoveChanged ()
 信号会在 enableSystemMove 属性的值改变时被发送
 
void enableBlurWindowChanged ()
 信号会在 enableBlurWindow 属性的值改变时被发送
 
void autoInputMaskByClipPathChanged ()
 信号会在 autoInputMaskByClipPath 属性的值改变时被发送
 

Public 成员函数

 DPlatformHandle (QWindow *window, QObject *parent=0)
 DPlatformHandle::DPlatformHandlewindow 对象传递给 enableDXcbForWindow window 要开启DTK风格的主窗口 parent DPlatformHandle 对象的父对象
 
bool setWindowBlurAreaByWM (const QVector< WMBlurArea > &area)
 
bool setWindowBlurAreaByWM (const QList< QPainterPath > &paths)
 DPlatformHandle::setWindowBlurAreaByWM 这只是一个重载的函数,将调用 setWindowBlurAreaByWM(const QVector<DPlatformHandle::WMBlurArea> &area) 并将构造对象时传递的主窗口当做第一个参数 paths
 
int windowRadius () const
 
int borderWidth () const
 
QColor borderColor () const
 
int shadowRadius () const
 
QPoint shadowOffset () const
 
QColor shadowColor () const
 
EffectScene windowEffect ()
 
EffectType windowStartUpEffect ()
 
QPainterPath clipPath () const
 
QRegion frameMask () const
 
QMargins frameMargins () const
 
bool translucentBackground () const
 
bool enableSystemResize () const
 
bool enableSystemMove () const
 
bool enableBlurWindow () const
 
bool autoInputMaskByClipPath () const
 
WId realWindowId () const
 

静态 Public 成员函数

static QString pluginVersion ()
 DPlatformHandle::pluginVersion
 
static bool isDXcbPlatform ()
 DPlatformHandle::isDXcbPlatform 检查当前程序是否使用了dxcb平台插件。
 
static void enableDXcbForWindow (QWindow *window)
 DPlatformHandle::enableDXcbForWindow 将 QWindow 的窗口装饰设置为 DTK 风格,这将使用 Qt::FramelessWindowHint 去除本地窗口管理器 给窗口附加的边框修饰以及窗口阴影效果,并且,会创建一个对应的本地窗口(在X11平台就是指X Window) 作为此窗口的父窗口,父窗口(Frame Window)中将根据子窗口(Sub Window)的有效区域绘制阴影和边 框等效果,默认情况下,子窗口的有效区域为一个圆角矩形,结构如下: \raw HTML
 
static void enableDXcbForWindow (QWindow *window, bool redirectContent)
 DPlatformHandle::enableDXcbForWindow 功能上和 DPlatformHandle::enableDXcbForWindow(QWindow *) 一致.
 
static bool isEnabledDXcb (const QWindow *window)
 DPlatformHandle::isEnabledDXcb.
 
static bool setEnabledNoTitlebarForWindow (QWindow *window, bool enable)
 DPlatformHandle::setEnabledNoTitlebarForWindow.
 
static bool isEnabledNoTitlebar (const QWindow *window)
 DPlatformHandle::isEnableNoTitlebar window
 
static bool setWindowBlurAreaByWM (QWindow *window, const QVector< WMBlurArea > &area)
 
static bool setWindowBlurAreaByWM (QWindow *window, const QList< QPainterPath > &paths)
 DPlatformHandle::setWindowBlurAreaByWM 设置窗口背景的模糊区域,使用 QPainterPath 描述模糊区域,使用起来更加的灵活,可以 实现任何形状,但是性能要低于使用 QVector<DPlatformHandle::WMBlurArea> 描述模糊区域。示例:
 
static bool setWindowWallpaperParaByWM (QWindow *window, const QRect &area, WallpaperScaleMode sMode, WallpaperFillMode fMode)
 DPlatformHandle::setWindowWallpaperParaByWM 设置窗口背景壁纸,示例:
 
static bool connectWindowManagerChangedSignal (QObject *object, std::function< void()> slot)
 DPlatformHandle::connectWindowManagerChangedSignal 将窗口管理器变化的信号链接到 object 对象的 slot 槽,建议使用 DWindowManager::windowManagerChanged object slot
 
static bool connectHasBlurWindowChanged (QObject *object, std::function< void()> slot)
 DPlatformHandle::connectHasBlurWindowChanged 将窗口管理器是否支持背景模糊的信号链接到 object 对象的 slot 槽,建议使用 DWindowManager::hasBlurWindowChanged object slot
 
static void setDisableWindowOverrideCursor (QWindow *window, bool disable)
 DPlatformHandle::setDisableWindowOverrideCursor 如果 disable 为 true,则禁止窗口 window 改变光标样式,否则允许改变光标样式。 窗口被禁止改变光标样式后,使用 QWindow::setCursor 将不会产生任何效果。 window disable
 
static WId windowLeader ()
 

Protected 成员函数

bool eventFilter (QObject *obj, QEvent *event) Q_DECL_OVERRIDE
 

属性

int windowRadius
 窗口的圆角半径。默认情况下,窗口管理器支持混成时,圆角半径为4,否则为0,并且 会随着窗口管理器开启/关闭混成效果而变化
 
int borderWidth
 窗口的外边框宽度。默认情况下,窗口管理器支持混成时,边框宽度为1,否则对于可以 改变大小的窗口其值为2,否则为1,并且会随着窗口管理器开启/关闭混成效果而变化
 
QColor borderColor
 窗口外边框的颜色。默认情况下,窗口管理器支持混成时,颜色为 QColor(0, 0, 0, 255 * 0.15), 否则为边框颜色和 #e0e0e0 的混合,并且会随着窗口管理器开启/关闭混成效果而变化
 
int shadowRadius
 窗口的阴影半径。默认为 60
 
QPoint shadowOffset
 窗口阴影的偏移量。默认为 QPoint(0,16)
 
QColor shadowColor
 窗口阴影的颜色。默认为 QColor(0, 0, 0, 255 * 0.6)
 
EffectScene windowEffect
 
EffectType windowStartUpEffect
 
QPainterPath clipPath
 窗口的裁剪区域。处于路径内部的区域为窗口有效区域,非有效区域内的窗口内容 将无法显示,并且无法收到鼠标和触摸事件。示例:
 
QRegion frameMask
 设置 Frame Window 的遮罩,和 clipPath 不同的是,它的裁剪包括阴影 部分。示例:
 
QMargins frameMargins
 Sub Window 相对于 Frame Window 的边距
 
bool translucentBackground
 如果此属性值为 true,则在更新窗口绘制内容之前会先清空要更新区域内的图像, 否则不清空,默认为 false
 
bool enableSystemResize
 如果此属性值为 true,则允许外界改变窗口的大小(如使用鼠标拖拽窗口边框), 否则不允许。默认为 true
 
bool enableSystemMove
 如果此属性值为 ture,则允许外界移动窗口的位置(如使用鼠标拖拽移动窗口), 否则不允许。默认为 true
 
bool enableBlurWindow
 如果此属性为 true,则窗口有效区域内的背景将呈现出模糊效果,否则无特效。 默认为 false
 
bool autoInputMaskByClipPath
 如果此属性值为 true,则窗口可输入区域跟随其 clipPath 属性,否则不 跟随。默认为 true
 
WId realWindowId
 Sub Window 的窗口 id,直接使用 QWindow::winId 或 QWidget::winId 获取到的是 Frame Window 的窗口 id
 

详细描述

一个和Qt dxcb平台插件交互的工具类.

\inmodule dtkgui

实质性的功能皆在dxcb插件中实现,此插件目前只 支持X11平台,在其它平台上使用这个类不会有任何效果。关于dxcb:它介于Qt应用和Qt xcb平台 插件之间,通过覆写xcb插件中某些对象的虚函数来改变它的一些行为,本质上来讲是Qt xcb插件的 扩展,在X11平台上为DTK应用提供了一些改变窗口效果的功能(比如自定义窗口的边框)、其它和平 台密切相关的实现(比如修复Qt应用在X11平台的一些bug),不能脱离Qt xcb插件独立运行。dxcb 通过重载 QPlatformNativeInterface 提供接口,DPlatformHandle 中使用 QGuiApplication::platformFunction 调用这些接口。Application、dxcb、qt xcb 之间 的关系: \raw HTML

      ┏━━━━━━━━━━━━━━━━┓
      ┃   Application  ┃
      ┗━━━━━━━━━━━━━━━━┛
              ⇅
    ┏━━━━━━━━━━━━━━━━━━━━┓
    ┃     dxcb plugin    ┃
    ┗━━━━━━━━━━━━━━━━━━━━┛
              ⇅
 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
 ┃      qt xcb platform      ┃
 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

\endraw

{http://doc.qt.io/qt-5/qpa.html}{QPA} {https://github.com/linuxdeepin/qt5dxcb-plugin/}{dxcb插件}

参见
Dtk::Gui::DPlatformHandle::isDXcbPlatform
QGuiApplication::platformNativeInterface
Dtk::Widget::DMainWindow
DWindowManagerHelper
警告
使用此工具前要确保应用加载了dxcb插件
因为 QGuiApplication::platformFunction 是在 Qt 5.4.0 版本引入的新接口, 所以 DPlatformHandle 不支持 Qt 5.4.0 以下版本。

构造及析构函数说明

◆ DPlatformHandle()

Dtk::Gui::DPlatformHandle::DPlatformHandle ( QWindow *  window,
QObject *  parent = 0 
)
explicit

DPlatformHandle::DPlatformHandlewindow 对象传递给 enableDXcbForWindow window 要开启DTK风格的主窗口 parent DPlatformHandle 对象的父对象

参见
DPlatformHandle::enableDXcbForWindow(QWindow *)

成员函数说明

◆ connectHasBlurWindowChanged()

bool Dtk::Gui::DPlatformHandle::connectHasBlurWindowChanged ( QObject *  object,
std::function< void()>  slot 
)
static

DPlatformHandle::connectHasBlurWindowChanged 将窗口管理器是否支持背景模糊的信号链接到 object 对象的 slot 槽,建议使用 DWindowManager::hasBlurWindowChanged object slot

返回
如果链接成功则返回 true,否则返回 false
参见
DWindowManagerHelper::hasBlurWindowChanged

◆ connectWindowManagerChangedSignal()

bool Dtk::Gui::DPlatformHandle::connectWindowManagerChangedSignal ( QObject *  object,
std::function< void()>  slot 
)
static

DPlatformHandle::connectWindowManagerChangedSignal 将窗口管理器变化的信号链接到 object 对象的 slot 槽,建议使用 DWindowManager::windowManagerChanged object slot

返回
如果链接成功则返回 true,否则返回 false
参见
DWindowManagerHelper::windowManagerChanged()

◆ enableDXcbForWindow() [1/2]

void Dtk::Gui::DPlatformHandle::enableDXcbForWindow ( QWindow *  window)
static

DPlatformHandle::enableDXcbForWindow 将 QWindow 的窗口装饰设置为 DTK 风格,这将使用 Qt::FramelessWindowHint 去除本地窗口管理器 给窗口附加的边框修饰以及窗口阴影效果,并且,会创建一个对应的本地窗口(在X11平台就是指X Window) 作为此窗口的父窗口,父窗口(Frame Window)中将根据子窗口(Sub Window)的有效区域绘制阴影和边 框等效果,默认情况下,子窗口的有效区域为一个圆角矩形,结构如下: \raw HTML

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃    Frame Window             ┃
┃                             ┃
┃                             ┃
┃     ╭┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╮     ┃
┃     ┋    Sub Window   ┋     ┃
┃     ┋                 ┋     ┃
┃     ┋                 ┋     ┃
┃     ┋                 ┋     ┃
┃     ┋                 ┋     ┃
┃     ┋                 ┋     ┃
┃     ┋                 ┋     ┃
┃     ┋                 ┋     ┃
┃     ┋                 ┋     ┃
┃     ╰┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╯     ┃
┃                             ┃
┃                             ┃
┃                             ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

\endraw

但是,如果窗口管理器自身支持隐藏窗口标题栏,则此方法将优先调用 enableNoTitlebarForWindow 实现同样的效果。

例子:

QWidget w1;
w1.setWindowTitle("使用系统边框的窗口");
w1.show();
DMainWindow w2;
QWidget w3;
w2.titlebar()->setTitle("使用DTK风格边框带标题栏的窗口");
w3.setWindowTitle("使用DTK风格边框没有标题栏的窗口");
w2.show();
w3.show(); // 因为这个窗口没有标题栏,所以不会显示窗口标题
static void enableDXcbForWindow(QWindow *window)
DPlatformHandle::enableDXcbForWindow 将 QWindow 的窗口装饰设置为 DTK 风格,这将使用 Qt::FramelessWindowHint 去除本地窗口管理器...
Definition dplatformhandle.cpp:519

开启了dxcb的窗口,在窗口外边缘10像素的范围按下鼠标左键可以触发改变窗口大小的行为, 而且会自动将鼠标吸附到对应的窗口边缘,增强了拖拽改变窗口大小的体验。效果: 另外,所有到达主窗口的鼠标移动事件如果没有调用 QEvent::accepted ,则会触发主窗 口的移动效果,默认情况下,一个没有子控件的DTK窗口,如果没有重写 QWidget::mouseMoveEvent , 则使用鼠标左键在窗口的任意地方按住并移动都会触发移动窗口的动作。如:

class Window : public QWidget
{
public:
explicit Window() {
}
protected:
void mouseMoveEvent(QMouseEvent *event) override {
event->accept();
}
};
Window w;
w.show();

将无法使用鼠标移动窗口w

窗口管理器(如X11平台上的Window Manager)是否支持混成会影响dxcb插件对窗口添加的默认装饰。

注解
在 Deepin 桌面环境中,打开窗口特效则支持混成,关闭窗口特效则不支持混成

支持混成: 不支持混成: 并且,在不支持混成的窗口管理器中,上述“窗口边缘的鼠标吸附”效果也会被禁用。可以使用 DWindowManagerHelper::hasComposite 或 QX11Info::isCompositingManagerRunning 判断当前运行的窗口管理器是否支持混成。 window

参见
Dtk::Gui::DPlatformHandle::setEnabledNoTitlebarForWindow()

◆ enableDXcbForWindow() [2/2]

void Dtk::Gui::DPlatformHandle::enableDXcbForWindow ( QWindow *  window,
bool  redirectContent 
)
static

DPlatformHandle::enableDXcbForWindow 功能上和 DPlatformHandle::enableDXcbForWindow(QWindow *) 一致.

window redirectContent 如果值为 true,Sub Window 将不可见,且它的绘制内容会 被合成到外层的 Frame Window(它的父窗口),否则 Sub Window 和 Frame Window 会分开绘制和显示。默认情况下只需要使用 DPlatformHandle::enableDXcbForWindow(QWindow *), dxcb插件中会自动根据窗口渲染类型选择使用更合适的实现方式,使用 OpenGL 渲染的窗口将开启 redirectContent 模式。

注解
如果窗口内嵌入了其它的本地窗口(如X11平台的X Window),默认情况下,这个窗口 绘制的内容不受dxcb插件的控制,它的绘制内容可能会超过 Sub Window 的有效区域,这种 情况下,应该使用此接口,并将 redirectContent 指定为 true。

{https://www.x.org/releases/X11R7.5/doc/damageproto/damageproto.txt}{X11 Damage}

◆ isDXcbPlatform()

bool Dtk::Gui::DPlatformHandle::isDXcbPlatform ( )
static

DPlatformHandle::isDXcbPlatform 检查当前程序是否使用了dxcb平台插件。

返回
正在使用返回 true,否则返回 false。

◆ isEnabledDXcb()

bool Dtk::Gui::DPlatformHandle::isEnabledDXcb ( const QWindow *  window)
static

DPlatformHandle::isEnabledDXcb.

返回
如果窗口 window 开启了DTK风格的窗口修饰则返回 true,否则返回 false
参见
DPlatformHandle::isEnabledNoTitlebar()

◆ isEnabledNoTitlebar()

bool Dtk::Gui::DPlatformHandle::isEnabledNoTitlebar ( const QWindow *  window)
static

DPlatformHandle::isEnableNoTitlebar window

返回
如果窗口使用窗管提供的方式隐藏了标题栏则返回 true,否则返回 false
参见
DPlatformHandle::isEnabledDXcb

◆ pluginVersion()

QString Dtk::Gui::DPlatformHandle::pluginVersion ( )
static

DPlatformHandle::pluginVersion

返回
返回dxcb插件的版本
注解
在旧版dxcb插件中未实现获取版本的接口,将会返回一个空的 QString 对象

◆ setEnabledNoTitlebarForWindow()

bool Dtk::Gui::DPlatformHandle::setEnabledNoTitlebarForWindow ( QWindow *  window,
bool  enable 
)
static

DPlatformHandle::setEnabledNoTitlebarForWindow.

使用窗口管理器提供的方式隐藏窗口的标题栏,目前已适配 DDE KWin 窗管,在窗口管理器支持的前提下, 此方法将通过设置窗口属性 _DEEPIN_SCISSOR_WINDOW 的值为 1 来开启无标题栏效果。 window 被设置的 QWindow 实例. enable 是否开启无标题属性.

返回
设置成功返回 true,否则返回false.
参见
DPlatformHandle::enableDXcbForWindow()
DWindowManagerHelper::hasNoTitlebar()

◆ setWindowBlurAreaByWM() [1/2]

bool Dtk::Gui::DPlatformHandle::setWindowBlurAreaByWM ( const QList< QPainterPath > &  paths)

DPlatformHandle::setWindowBlurAreaByWM 这只是一个重载的函数,将调用 setWindowBlurAreaByWM(const QVector<DPlatformHandle::WMBlurArea> &area) 并将构造对象时传递的主窗口当做第一个参数 paths

返回
参见
DPlatformHandle::setWindowBlurAreaByWM()

◆ setWindowBlurAreaByWM() [2/2]

bool Dtk::Gui::DPlatformHandle::setWindowBlurAreaByWM ( QWindow *  window,
const QList< QPainterPath > &  paths 
)
static

DPlatformHandle::setWindowBlurAreaByWM 设置窗口背景的模糊区域,使用 QPainterPath 描述模糊区域,使用起来更加的灵活,可以 实现任何形状,但是性能要低于使用 QVector<DPlatformHandle::WMBlurArea> 描述模糊区域。示例:

QWindow w;
QList<QPainterPath> path_list;
QPainterPath path;
QFont font;
font.setPixelSize(100);
font.setBold(true);
path.addText(0, 150, font, "deepin");
path_list.append(path);
DPlatformHandle::setWindowBlurAreaByWM(&w, path_list);
QSurfaceFormat format = w.format();
format.setAlphaBufferSize(8);
w.setFormat(format);
w.resize(300, 300);
w.show();

window 目标窗口对象 paths 模糊区域,此区域范围内的窗口背景将填充为窗口后面内容模糊之后的图像

返回
如果设置成功则返回 true,否则返回 false
注解
调用此接口设置窗口背景模糊区域后将覆盖之前所设置的区域,包括调用 setWindowBlurAreaByWM(QWindow *, QVector<DPlatformHandle::WMBlurArea> &) 设置的窗口背景模糊路径
对于需要显示模糊背景的窗口,需要将其 QSurfaceFormat 的 alpha 通道设置为8
建议使用 DBlurEffectWidget 实现窗口背景模糊效果
此功能依赖于窗口管理器的实现,目前仅支持 deepin-wm 和 kwin 这两个窗口管理器
警告
setWindowBlurAreaByWM(QWindow *, QVector<DPlatformHandle::WMBlurArea> &) 能满足需求请不要使用此接口
参见
Dtk::Widget::DBlurEffectWidget
QSurfaceFormat::setAlphaBufferSize
QWindow::setFormat
DWindowManagerHelper::hasBlurWindow
DPlatformHandle::setWindowBlurAreaByWM()

◆ setWindowWallpaperParaByWM()

bool Dtk::Gui::DPlatformHandle::setWindowWallpaperParaByWM ( QWindow *  window,
const QRect &  area,
WallpaperScaleMode  sMode,
WallpaperFillMode  fMode 
)
static

DPlatformHandle::setWindowWallpaperParaByWM 设置窗口背景壁纸,示例:

QWindow w;
QRect area;
WallpaperScaleMode sMode
WallpaperFillMode fMode
area.setRect(50, 50, 200, 200);
bMode = WallpaperScaleFlag::FollowWindow | WallpaperFillFlag::PreserveAspectCrop;
QSurfaceFormat format = w.format();
format.setAlphaBufferSize(8);
w.setFormat(format);
w.resize(300, 300);
w.show();
static bool setWindowWallpaperParaByWM(QWindow *window, const QRect &area, WallpaperScaleMode sMode, WallpaperFillMode fMode)
DPlatformHandle::setWindowWallpaperParaByWM 设置窗口背景壁纸,示例:
Definition dplatformhandle.cpp:996

window 目标窗口对象 area 壁纸区域,此区域范围内的窗口背景将填充为用户设置的当前工作区窗口壁纸 sMode 控制壁纸缩放是随屏幕还是随窗口 fMode 控制壁纸是缩放还是裁剪

返回
如果设置成功则返回 true,否则返回 false
注解
对于需要显示opengl壁纸特效的窗口,需要将其 QSurfaceFormat 的 alpha 通道设置为8
需要在window handle有效之后调用否则3d下失效
调用此接口设置窗口背景壁纸区域后将覆盖之前所设置的区域
此功能依赖于窗口管理器的实现,目前仅支持 kwin 窗口管理器
参见
Dtk::Widget::DBlurEffectWidget
QSurfaceFormat::setAlphaBufferSize
QWindow::setFormat
DWindowManagerHelper::hasBlurWindow
DPlatformHandle::setWindowBlurAreaByWM(QWindow *, const QList<QPainterPath> &)

属性说明

◆ autoInputMaskByClipPath

Dtk::Gui::DPlatformHandle::autoInputMaskByClipPath
readwrite

如果此属性值为 true,则窗口可输入区域跟随其 clipPath 属性,否则不 跟随。默认为 true

注解
可输入区域指可接收鼠标或触摸事件的区域
可读可写

◆ borderColor

Dtk::Gui::DPlatformHandle::borderColor
readwrite

窗口外边框的颜色。默认情况下,窗口管理器支持混成时,颜色为 QColor(0, 0, 0, 255 * 0.15), 否则为边框颜色和 #e0e0e0 的混合,并且会随着窗口管理器开启/关闭混成效果而变化

注解
可读可写
参见
DWindowManagerHelper::hasComposite

◆ borderWidth

Dtk::Gui::DPlatformHandle::borderWidth
readwrite

窗口的外边框宽度。默认情况下,窗口管理器支持混成时,边框宽度为1,否则对于可以 改变大小的窗口其值为2,否则为1,并且会随着窗口管理器开启/关闭混成效果而变化

注解
可读可写
警告
手动设置值后将无法再随着窗口管理器是否支持混成而自动更新边框宽度
参见
DWindowManagerHelper::hasComposite

◆ clipPath

Dtk::Gui::DPlatformHandle::clipPath
readwrite

窗口的裁剪区域。处于路径内部的区域为窗口有效区域,非有效区域内的窗口内容 将无法显示,并且无法收到鼠标和触摸事件。示例:

QWidget w;
QPainterPath path;
QFont font;
font.setPixelSize(100);
path.addText(0, 150, font, "deepin");
DPlatformHandle handle(&w);
handle.setClipPath(path);
w.resize(400, 200);
w.show();
一个和Qt dxcb平台插件交互的工具类.
Definition dplatformhandle.h:24
注解
可读可写
窗口的阴影和外边框绘制和其有效区域密切相关
警告
设置此属性后将导致 DPlatformHandle::windowRadius 失效

◆ enableBlurWindow

Dtk::Gui::DPlatformHandle::enableBlurWindow
readwrite

如果此属性为 true,则窗口有效区域内的背景将呈现出模糊效果,否则无特效。 默认为 false

注解
可读可写
参见
DPlatformHandle::setWindowBlurAreaByWM

◆ enableSystemMove

Dtk::Gui::DPlatformHandle::enableSystemMove
readwrite

如果此属性值为 ture,则允许外界移动窗口的位置(如使用鼠标拖拽移动窗口), 否则不允许。默认为 true

注解
无论属性值是多少,Qt::Popup 和 Qt::BypassWindowManagerHint 类型的 窗口都不允许改变大小
可读可写
此属性仅仅控制 dxcb 中的行为,不会影响窗口管理器的行为
参见
DWindowManagerHelper::FUNC_MOVE

◆ enableSystemResize

Dtk::Gui::DPlatformHandle::enableSystemResize
readwrite

如果此属性值为 true,则允许外界改变窗口的大小(如使用鼠标拖拽窗口边框), 否则不允许。默认为 true

注解
无论属性值是多少,Qt::Popup 和 Qt::BypassWindowManagerHint 类型的 窗口都不允许改变大小
可读可写
此属性仅仅控制 dxcb 中的行为,不会影响窗口管理器的行为
参见
QWidget::setFixedSize
QWindow::setMinimumSize
QWindow::setMaximumSize
DWindowManagerHelper::FUNC_RESIZE

◆ frameMargins

Dtk::Gui::DPlatformHandle::frameMargins
read

Sub Window 相对于 Frame Window 的边距

注解
只读
警告
在窗口隐藏时不保证此值的正确性

◆ frameMask

Dtk::Gui::DPlatformHandle::frameMask
readwrite

设置 Frame Window 的遮罩,和 clipPath 不同的是,它的裁剪包括阴影 部分。示例:

QWidget w;
DPlatformHandle handle(&w);
// 为何更好的观察效果,此处将阴影改为蓝色
handle.setShadowColor(Qt::blue);
w.resize(400, 200);
w.show();
QRect frame_rect = w.rect() + handle.frameMargins();
frame_rect.moveTopLeft(QPoint(0, 0));
handle.setFrameMask(QRegion(frame_rect, QRegion::Ellipse));
注解
可读可写
由于实现机制限制,使用此属性裁剪 Frame Window 时,无法去除边缘产生的锯齿

◆ realWindowId

Dtk::Gui::DPlatformHandle::realWindowId
read

Sub Window 的窗口 id,直接使用 QWindow::winId 或 QWidget::winId 获取到的是 Frame Window 的窗口 id

注解
只读

◆ shadowColor

Dtk::Gui::DPlatformHandle::shadowColor
readwrite

窗口阴影的颜色。默认为 QColor(0, 0, 0, 255 * 0.6)

注解
可读可写
窗口管理器不支持混成时此值无效
参见
DWindowManagerHelper::hasComposite

◆ shadowOffset

Dtk::Gui::DPlatformHandle::shadowOffset
readwrite

窗口阴影的偏移量。默认为 QPoint(0,16)

注解
可读可写
窗口管理器不支持混成时此值无效
参见
DWindowManagerHelper::hasComposite

◆ shadowRadius

Dtk::Gui::DPlatformHandle::shadowRadius
readwrite

窗口的阴影半径。默认为 60

注解
可读可写
窗口管理器不支持混成时此值无效
参见
DWindowManagerHelper::hasComposite

◆ translucentBackground

Dtk::Gui::DPlatformHandle::translucentBackground
readwrite

如果此属性值为 true,则在更新窗口绘制内容之前会先清空要更新区域内的图像, 否则不清空,默认为 false

注解
可读可写

◆ windowRadius

Dtk::Gui::DPlatformHandle::windowRadius
readwrite

窗口的圆角半径。默认情况下,窗口管理器支持混成时,圆角半径为4,否则为0,并且 会随着窗口管理器开启/关闭混成效果而变化

注解
可读可写
窗口为半屏、全屏或最大化状态时此值不生效
警告
手动设置值后将无法再随着窗口管理器是否支持混成而自动更新边框宽度
参见
DWindowManagerHelper::hasComposite

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