Fluent-Qt

集合视图

DrawerView 抽屉视图

从窗口边缘滑出的面板。

示例

抽屉视图的真实 Gallery 示例

用法

右侧抽屉

setEdge() 选择滑出方向,setDrawerLength() 设置宽度,open() 打开;点击外部区域会关闭。

#include <FluentQt/Collections.h>
using namespace fluent::collections;

auto* drawer = new DrawerView(host);
drawer->setEdge(DrawerView::DrawerEdge::Right);
drawer->setDrawerLength(260);
drawer->setContentWidget(settingsPanel, WidgetOwnership::Owned);
auto* openButton = new Button("Open drawer", host);
QObject::connect(openButton, &Button::clicked,
                 drawer, &DrawerView::open);

fluent::collections::DrawerView

继承自 QWidget · FluentElement · QMLPlus

支持模态、遮罩和拖拽行为的同窗口抽屉浮层。

构造函数

属性

bool isOpen

弹层、抽屉或通知表面是否处于打开状态。

读取 isOpen()设置 setIsOpen()通知 isOpenChanged()
DrawerEdge edge

抽屉出现的窗口边缘。

读取 edge()设置 setEdge()通知 edgeChanged()
qreal position

抽屉沿打开方向的动画位置。

读取 position()设置 setPosition()通知 positionChanged()
int drawerLength

抽屉沿打开方向测量的长度。

读取 drawerLength()设置 setDrawerLength()通知 drawerLengthChanged()
QMargins availableMargins

抽屉定位前从所属窗口可用区域中移除的边距。

读取 availableMargins()设置 setAvailableMargins()通知 availableMarginsChanged()
bool modal

浮层是否阻止其外部交互。

读取 isModal()设置 setModal()通知 modalChanged()
bool dim

浮层后方是否显示遮罩层。

读取 isDim()设置 setDim()通知 dimChanged()
double dimOpacity

遮罩透明度范围 [0, 1],-1 使用主题烟雾值,仅在 dim 开启时生效。

读取 dimOpacity()设置 setDimOpacity()通知 dimOpacityChanged()
double backdropBlurRadius

所属窗口背景快照的模糊半径,范围 [0, 32] 逻辑像素;0 关闭模糊。

读取 backdropBlurRadius()设置 setBackdropBlurRadius()通知 backdropBlurRadiusChanged()
ClosePolicy closePolicy

控制外部点击、Esc 或编程关闭行为的策略。

读取 closePolicy()设置 setClosePolicy()通知 closePolicyChanged()
bool interactive

指针拖拽是否可以操作抽屉。

读取 isInteractive()设置 setInteractive()通知 interactiveChanged()
int dragMargin

开始抽屉拖拽时使用的边缘区域宽度。

读取 dragMargin()设置 setDragMargin()通知 dragMarginChanged()
int outerCornerRadius

抽屉外侧边缘使用的圆角半径。

读取 outerCornerRadius()设置 setOuterCornerRadius()通知 outerCornerRadiusChanged()
bool animationEnabled

抽屉打开/关闭过程是否播放过渡动画。

读取 isAnimationEnabled()设置 setAnimationEnabled()通知 animationEnabledChanged()
QWidget* contentWidget

承载在抽屉面板中的内容控件。

读取 contentWidget()设置 setContentWidget()通知 contentWidgetChanged()
fluent::WidgetOwnership contentOwnership

当前内容控件的释放策略。

读取 contentOwnership()通知 contentOwnershipChanged()

方法

bool isOpen() const

弹层、抽屉或通知表面是否处于打开状态。

void setIsOpen(bool open)

弹层、抽屉或通知表面是否处于打开状态。

DrawerEdge edge() const

抽屉出现的窗口边缘。

void setEdge(DrawerEdge edge)

抽屉出现的窗口边缘。

qreal position() const

抽屉沿打开方向的动画位置。

void setPosition(qreal position)

抽屉沿打开方向的动画位置。

int drawerLength() const

抽屉沿打开方向测量的长度。

void setDrawerLength(int length)

抽屉沿打开方向测量的长度。

QMargins availableMargins() const

抽屉定位前从所属窗口可用区域中移除的边距。

void setAvailableMargins(const QMargins& margins)

抽屉定位前从所属窗口可用区域中移除的边距。

bool isModal() const

浮层是否阻止其外部交互。

void setModal(bool modal)

浮层是否阻止其外部交互。

bool isDim() const

浮层后方是否显示遮罩层。

void setDim(bool dim)

浮层后方是否显示遮罩层。

double dimOpacity() const

遮罩透明度范围 [0, 1],-1 使用主题烟雾值,仅在 dim 开启时生效。

void setDimOpacity(double opacity)

遮罩透明度范围 [0, 1],-1 使用主题烟雾值,仅在 dim 开启时生效。

double backdropBlurRadius() const

所属窗口背景快照的模糊半径,范围 [0, 32] 逻辑像素;0 关闭模糊。

void setBackdropBlurRadius(double radius)

所属窗口背景快照的模糊半径,范围 [0, 32] 逻辑像素;0 关闭模糊。

void refreshBackdrop()

背景内容变化后重新采集所属窗口快照。

ClosePolicy closePolicy() const

控制外部点击、Esc 或编程关闭行为的策略。

void setClosePolicy(ClosePolicy policy)

控制外部点击、Esc 或编程关闭行为的策略。

bool isInteractive() const

指针拖拽是否可以操作抽屉。

void setInteractive(bool interactive)

指针拖拽是否可以操作抽屉。

int dragMargin() const

开始抽屉拖拽时使用的边缘区域宽度。

void setDragMargin(int margin)

开始抽屉拖拽时使用的边缘区域宽度。

int outerCornerRadius() const

抽屉外侧边缘使用的圆角半径。

void setOuterCornerRadius(int radius)

抽屉外侧边缘使用的圆角半径。

bool isAnimationEnabled() const

抽屉打开/关闭过程是否播放过渡动画。

void setAnimationEnabled(bool enabled)

抽屉打开/关闭过程是否播放过渡动画。

QWidget* contentWidget() const

承载在抽屉面板中的内容控件。

void setContentWidget(QWidget* widget)

使用 Borrowed 释放语义承载内容控件。

bool setContentWidget(QWidget* widget, WidgetOwnership ownership)

使用显式释放策略承载内容控件。

QWidget* takeContentWidget()

将内容作为无父控件、由调用方持有的 QWidget 移除并返回。

WidgetOwnership contentOwnership() const

当前内容控件的释放策略。

信号

void isOpenChanged(bool open)

弹层、抽屉或通知表面是否处于打开状态。

void edgeChanged(DrawerEdge edge)

抽屉出现的窗口边缘。

void positionChanged(qreal position)

抽屉沿打开方向的动画位置。

void drawerLengthChanged(int length)

抽屉沿打开方向测量的长度。

void availableMarginsChanged(const QMargins& margins)

抽屉定位前从所属窗口可用区域中移除的边距。

void modalChanged(bool modal)

浮层是否阻止其外部交互。

void dimChanged(bool dim)

浮层后方是否显示遮罩层。

void dimOpacityChanged(double opacity)

遮罩透明度范围 [0, 1],-1 使用主题烟雾值,仅在 dim 开启时生效。

void backdropBlurRadiusChanged(double radius)

所属窗口背景快照的模糊半径,范围 [0, 32] 逻辑像素;0 关闭模糊。

void closePolicyChanged(ClosePolicy policy)

控制外部点击、Esc 或编程关闭行为的策略。

void interactiveChanged(bool interactive)

指针拖拽是否可以操作抽屉。

void dragMarginChanged(int margin)

开始抽屉拖拽时使用的边缘区域宽度。

void outerCornerRadiusChanged(int radius)

抽屉外侧边缘使用的圆角半径。

void animationEnabledChanged(bool enabled)

抽屉打开/关闭过程是否播放过渡动画。

void contentWidgetChanged(QWidget* widget)

承载在抽屉面板中的内容控件。

枚举

enum class DrawerEdge
  • Left
  • Right
  • Top
  • Bottom
enum CloseFlag
  • NoAutoClose = 0
  • CloseOnPressOutside = 1 << 0
  • CloseOnEscape = 1 << 1

类型与别名

析构函数

PySide6 扩展

setOwnedContentWidget(widget)

Install content that is deleted when it leaves the drawer.

setBorrowedContentWidget(widget)

Install content that becomes parentless when released.

setReparentedContentWidget(widget)

Install content restored to its current QWidget parent.

子类扩展接口

方法

继承自 fluent::FluentElement

方法

static void setTheme(Theme theme)

更新全局主题,并通知所有活跃的 FluentElement 实例。

static void setThemeDeferred(Theme theme)

以可见元素优先的批次调度主题刷新,避免阻塞当前交互。

static Theme currentTheme()

返回当前生效的全局主题。

static bool themeUsesDarkAppearance(Theme theme)

返回指定主题是否使用暗色底的 chrome 与材质 token。

static void refreshTheme()

在设计 token 变化后重新广播当前主题以触发重绘。

static int themeGeneration()

每次主题变化自增的单调计数器,用于过期判断。

Theme effectiveTheme() const

解析此元素实际使用的主题,会优先读取 QWidget 父链上的局部主题覆盖。

bool effectiveThemeUsesDarkAppearance() const

返回此元素的实际主题是否使用暗色底 chrome。

bool setThemeOverrides(const QJsonObject& overrides)

供组件侧访问的设计 token 接口。

QJsonObject themeOverrides() const

返回当前元素的覆盖配置。

void clearThemeOverrides()

恢复全部 token 跟随全局主题。

const Colors& themeColorsRef() const

对当前色板的零拷贝访问(用于绘制热路径)。

Material::AcrylicToken themeAcrylic() const

材质、阴影和自适应布局 token。

QColor themeBackdrop(bool active) const

给定激活状态下的窗口 chrome 背景色。

virtual void onThemeUpdated()

全局主题变化后调用。

枚举

enum Theme

解析设计 token 时使用的全局视觉主题。

  • Light = 0
  • Dark = 1
  • HighContrast = 2

类型与别名

struct Colors

返回给组件使用的设计 token 快照。

继承自 fluent::QMLPlus

方法

AnchorLayout::Anchors* anchors()

返回 QWidget 宿主的可变锚点配置。

void setState(const QString& name)

应用具名 state;名称为空时恢复默认状态。

void addState(const QMLState& state)

注册或替换一个具名 state 定义。

void evaluateStates()

重新计算条件;按注册顺序选择首个成立的条件。

QMLPlusRuntime* runtime()

返回按需创建、由宿主持有的状态观察对象。

void setAnchors(const AnchorLayout::Anchors& anchors)

替换宿主的全部锚点,并使父布局失效。

void resetAnchors()

清除宿主全部锚点,并使父布局失效。

void addTransition(const StateTransition& transition)

按优先顺序注册状态过渡。

void setBehavior(const char* propertyName, const PropertyAnimation& animation)

设置宿主受管理属性写入时使用的默认动画。

void clearBehavior(const char* propertyName)

移除后续受管理写入使用的默认动画。

bool writeProperty(const char* propertyName, const QVariant& value)

通过 Behavior 写入宿主属性,且不移除该属性的绑定。

Qt 基类完整成员:QWidget