DtkGui 5.5.23
DTK Gui module
| Public 类型 | Public 槽 | 信号 | Public 成员函数 | 静态 Public 成员函数 | Protected 成员函数 | 属性 | 所有成员列表
Dtk::Gui::DPlatformHandle类 参考

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

类 Dtk::Gui::DPlatformHandle 继承关系图:
Inheritance graph
[图例]
Dtk::Gui::DPlatformHandle 的协作图:
Collaboration graph
[图例]

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

Public 类型

enum  WallpaperScaleMode { FollowScreen = 0x00000000 , FollowWindow = 0x00010000 }
 
enum  WallpaperFillMode { PreserveAspectCrop = 0x00000000 , PreserveAspectFit = 0x00000001 }
 

Public 槽

void setWindowRadius (int windowRadius)
 
void setBorderWidth (int borderWidth)
 
void setBorderColor (const QColor &borderColor)
 
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 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)
 DPlatformHandle::setWindowBlurAreaByWM 这只是一个重载的函数,将调用 setWindowBlurAreaByWM(const QList<QPainterPath> &paths) 并将构造对象时传递的主窗口当做第一个参数 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
 
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 成员函数 继承自 QObject
virtual const QMetaObjectmetaObject () const const
 
 QObject (QObject *parent)
 
virtual bool event (QEvent *e)
 
virtual bool eventFilter (QObject *watched, QEvent *event)
 
QString objectName () const const
 
void setObjectName (const QString &name)
 
bool isWidgetType () const const
 
bool isWindowType () const const
 
bool signalsBlocked () const const
 
bool blockSignals (bool block)
 
QThreadthread () const const
 
void moveToThread (QThread *targetThread)
 
int startTimer (int interval, Qt::TimerType timerType)
 
int startTimer (std::chrono::milliseconds time, Qt::TimerType timerType)
 
void killTimer (int id)
 
findChild (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegExp &regExp, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegularExpression &re, Qt::FindChildOptions options) const const
 
const QObjectListchildren () const const
 
void setParent (QObject *parent)
 
void installEventFilter (QObject *filterObj)
 
void removeEventFilter (QObject *obj)
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const const
 
bool disconnect (const char *signal, const QObject *receiver, const char *method) const const
 
bool disconnect (const QObject *receiver, const char *method) const const
 
void dumpObjectTree ()
 
void dumpObjectInfo ()
 
void dumpObjectTree () const const
 
void dumpObjectInfo () const const
 
bool setProperty (const char *name, const QVariant &value)
 
QVariant property (const char *name) const const
 
QList< QByteArraydynamicPropertyNames () const const
 
void destroyed (QObject *obj)
 
void objectNameChanged (const QString &objectName)
 
QObjectparent () const const
 
bool inherits (const char *className) const const
 
void deleteLater ()
 
 Q_DISABLE_COPY (Class)
 
 Q_DISABLE_MOVE (Class)
 
 Q_DISABLE_COPY_MOVE (Class)
 
qobject_cast (QObject *object)
 
qobject_cast (const QObject *object)
 
qFindChild (const QObject *obj, const QString &name)
 
QList< T > qFindChildren (const QObject *obj, const QString &name)
 
QList< T > qFindChildren (const QObject *obj, const QRegExp &regExp)
 
 Q_CLASSINFO (Name, Value)
 
 Q_INTERFACES (...)
 
 Q_PROPERTY (...)
 
 Q_ENUMS (...)
 
 Q_FLAGS (...)
 
 Q_ENUM (...)
 
 Q_FLAG (...)
 
 Q_ENUM_NS (...)
 
 Q_FLAG_NS (...)
 
 Q_OBJECT Q_OBJECT
 
 Q_GADGET Q_GADGET
 
 Q_NAMESPACE Q_NAMESPACE
 
 Q_NAMESPACE_EXPORT (EXPORT_MACRO)
 
 Q_SIGNALS Q_SIGNALS
 
 Q_SIGNAL Q_SIGNAL
 
 Q_SLOTS Q_SLOTS
 
 Q_SLOT Q_SLOT
 
 Q_EMIT Q_EMIT
 
 Q_INVOKABLE Q_INVOKABLE
 
 Q_REVISION Q_REVISION
 
 Q_SET_OBJECT_NAME (Object)
 
 QT_NO_NARROWING_CONVERSIONS_IN_CONNECT QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
 

静态 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)
 DPlatformHandle::setWindowBlurAreaByWM 设置窗口背景的模糊区域,示例: 更多...
 
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 ()
 
- 静态 Public 成员函数 继承自 QObject
QString tr (const char *sourceText, const char *disambiguation, int n)
 
QString trUtf8 (const char *sourceText, const char *disambiguation, int n)
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, Functor functor)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
 
bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method)
 
bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
 
bool disconnect (const QMetaObject::Connection &connection)
 
bool disconnect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
 

Protected 成员函数

bool eventFilter (QObject *obj, QEvent *event) Q_DECL_OVERRIDE
 
- Protected 成员函数 继承自 QObject
QObjectsender () const const
 
int senderSignalIndex () const const
 
int receivers (const char *signal) const const
 
bool isSignalConnected (const QMetaMethod &signal) const const
 
virtual void timerEvent (QTimerEvent *event)
 
virtual void childEvent (QChildEvent *event)
 
virtual void customEvent (QEvent *event)
 
virtual void connectNotify (const QMetaMethod &signal)
 
virtual void disconnectNotify (const QMetaMethod &signal)
 

属性

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) 更多...
 
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 更多...
 
- 属性 继承自 QObject
 objectName
 

额外继承的成员函数

- Public 属性 继承自 QObject
typedef QObjectList
 

详细描述

一个和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

\l {http://doc.qt.io/qt-5/qpa.html}{QPA} \l {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:512

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

class Window : public QWidget
{
public:
explicit Window() {
}
protected:
void mouseMoveEvent(QMouseEvent *event) override {
event->accept();
}
};
virtual bool event(QEvent *e)

将无法使用鼠标移动窗口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。

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

◆ eventFilter()

bool Dtk::Gui::DPlatformHandle::eventFilter ( QObject obj,
QEvent event 
)
protectedvirtual

重载 QObject .

◆ 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/4]

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

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

返回
参见
DPlatformHandle::setWindowBlurAreaByWM()

◆ setWindowBlurAreaByWM() [2/4]

bool Dtk::Gui::DPlatformHandle::setWindowBlurAreaByWM ( const QVector< WMBlurArea > &  area)

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

返回
参见
DPlatformHandle::setWindowBlurAreaByWM(const QList<QPainterPath> &paths)

◆ setWindowBlurAreaByWM() [3/4]

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

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

QWindow w;
QPainterPath path;
QFont font;
font.setPixelSize(100);
font.setBold(true);
path.addText(0, 150, font, "deepin");
path_list.append(path);
QSurfaceFormat format = w.format();
format.setAlphaBufferSize(8);
w.setFormat(format);
w.resize(300, 300);
w.show();
static bool setWindowBlurAreaByWM(QWindow *window, const QVector< WMBlurArea > &area)
DPlatformHandle::setWindowBlurAreaByWM 设置窗口背景的模糊区域,示例:
Definition: dplatformhandle.cpp:743
void append(const T &value)

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()

◆ setWindowBlurAreaByWM() [4/4]

bool Dtk::Gui::DPlatformHandle::setWindowBlurAreaByWM ( QWindow *  window,
const QVector< WMBlurArea > &  area 
)
static

DPlatformHandle::setWindowBlurAreaByWM 设置窗口背景的模糊区域,示例:

QWindow w;
DPlatformHandle::WMBlurArea area;
area.x = 50;
area.y = 50;
area.width = 200;
area.height = 200;
area.xRadius = 10;
area.yRaduis = 10;
area_list.append(area);
QSurfaceFormat format = w.format();
format.setAlphaBufferSize(8);
w.setFormat(format);
w.resize(300, 300);
w.show();
void append(const T &value)

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

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

◆ 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:932
void setRect(int x, int y, int width, int height)

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();
DPlatformHandle(QWindow *window, QObject *parent=0)
DPlatformHandle::DPlatformHandle 将 window 对象传递给 enableDXcbForWindow window 要开启DTK风格的主窗口 parent DPlatf...
Definition: dplatformhandle.cpp:379
注解
可读可写
窗口的阴影和外边框绘制和其有效区域密切相关
警告
设置此属性后将导致 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));
void moveTopLeft(const QPoint &position)
注解
可读可写
由于实现机制限制,使用此属性裁剪 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

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