Fluent-Qt

对话框与浮层

TeachingTip 教学提示

指向某个控件的提示卡片,不会阻挡其他操作。

示例

教学提示的真实 Gallery 示例

用法

处理关闭原因

showAt() 指向目标控件;closing 信号中的 CloseReason 说明提示是如何关闭的。

#include <FluentQt/DialogsFlyouts.h>
using namespace fluent::dialogs_flyouts;

auto* tip = new TeachingTip(window());
tip->setPreferredPlacement(TeachingTip::Right);
tip->setLightDismissEnabled(true);
tip->setCardSize(QSize(320, 154));
connect(tip, &TeachingTip::closing, status,
        [status](TeachingTip::CloseReason reason) { updateStatus(reason); });
tip->showAt(targetButton);

fluent::dialogs_flyouts::TeachingTip

继承自 Popup

支持目标定位和可选尾巴的上下文教学浮层。

构造函数

属性

QWidget* target

教学提示用于锚定的目标控件。

读取 target()设置 setTarget()通知 targetChanged()
PreferredPlacement preferredPlacement

教学提示围绕目标的首选位置。

读取 preferredPlacement()设置 setPreferredPlacement()通知 preferredPlacementChanged()
int placementMargin

教学提示与目标之间保留的间距。

读取 placementMargin()设置 setPlacementMargin()通知 placementMarginChanged()
bool lightDismissEnabled

外部交互是否关闭教学提示。

读取 isLightDismissEnabled()设置 setLightDismissEnabled()通知 lightDismissEnabledChanged()
bool tailVisible

是否绘制教学提示尾巴。

读取 isTailVisible()设置 setTailVisible()通知 tailVisibleChanged()

方法

QWidget* target() const

教学提示用于锚定的目标控件。

void setTarget(QWidget* target)

教学提示用于锚定的目标控件。

PreferredPlacement preferredPlacement() const

教学提示围绕目标的首选位置。

void setPreferredPlacement(PreferredPlacement placement)

教学提示围绕目标的首选位置。

int placementMargin() const

教学提示与目标之间保留的间距。

void setPlacementMargin(int margin)

教学提示与目标之间保留的间距。

bool isLightDismissEnabled() const

外部交互是否关闭教学提示。

void setLightDismissEnabled(bool enabled)

外部交互是否关闭教学提示。

bool isTailVisible() const

是否绘制教学提示尾巴。

void setTailVisible(bool visible)

是否绘制教学提示尾巴。

QWidget* contentHost() const

卡片内容区容器——向此 widget 添加子控件(AnchorLayout 等); 几何随 placement / cardSize 自动更新,无需手动管理。

void setCardSize(const QSize& size)

设置卡片内容区尺寸(不含阴影和气泡箭头),默认 360×200。

信号

void targetChanged(QWidget* target)

教学提示用于锚定的目标控件。

void preferredPlacementChanged(PreferredPlacement placement)

教学提示围绕目标的首选位置。

void placementMarginChanged(int margin)

教学提示与目标之间保留的间距。

void lightDismissEnabledChanged(bool enabled)

外部交互是否关闭教学提示。

void tailVisibleChanged(bool visible)

是否绘制教学提示尾巴。

枚举

enum PreferredPlacement
  • Auto
  • Top
  • TopLeft
  • TopRight
  • Bottom
  • BottomLeft
  • BottomRight
  • Left
  • LeftTop
  • LeftBottom
  • Right
  • RightTop
  • RightBottom
enum CloseReason
  • Programmatic = Popup::Programmatic
  • ActionButton = Popup::ActionButton
  • CloseButton = Popup::CloseButton
  • LightDismiss = Popup::LightDismiss
  • TargetDestroyed = Popup::TargetDestroyed
子类扩展接口

方法

继承自 fluent::dialogs_flyouts::Popup

属性

bool isOpen

逻辑请求打开态,不是动画完成态,也不是 QWidget 可见性。

读取 isOpen()设置 setIsOpen()通知 isOpenChanged()
ClosePolicy closePolicy

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

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

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

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

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

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

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

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

未显式设置时,模态默认 4,非模态默认 0;显式值(包括 0)不随模态变化。

读取 backdropBlurRadius()设置 setBackdropBlurRadius()通知 backdropBlurRadiusChanged()
bool animationEnabled

弹层打开/关闭过程是否播放过渡动画。

读取 isAnimationEnabled()设置 setAnimationEnabled()通知 animationEnabledChanged()
double popupProgress

弹层打开/关闭动画进度。

读取 popupProgress()设置 setPopupProgress()通知 popupProgressChanged()

方法

bool isOpen() const

逻辑请求打开态,不是动画完成态,也不是 QWidget 可见性。

ClosePolicy closePolicy() const

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

void setClosePolicy(ClosePolicy p)

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

bool isModal() const

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

void setModal(bool m)

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

bool lightDismissConsumesPress() const

为 true 时,CloseOnPressOutside 轻关闭会 「吞掉」这次关闭点击,而非穿透到下方控件——即 ComboBox 下拉的语义(一次点击只关闭弹窗,不会顺带激活下方控件)。 默认 false,保持菜单式行为:关闭点击仍命中其目标。

void addLightDismissPassthrough(QWidget* widget)

上面「吞掉」的豁免区域: 落在这些控件内的关闭点击仍会穿透给它们,使同级工具栏/导航栏在弹窗关闭的同时仍可「一次点击」直达。 仅在 lightDismissConsumesPress 为真时有意义。

bool isDim() const

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

void setDim(bool d)

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

double dimOpacity() const

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

void setDimOpacity(double opacity)

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

double backdropBlurRadius() const

未显式设置时,模态默认 4,非模态默认 0;显式值(包括 0)不随模态变化。

void setBackdropBlurRadius(double radius)

未显式设置时,模态默认 4,非模态默认 0;显式值(包括 0)不随模态变化。

bool isAnimationEnabled() const

弹层打开/关闭过程是否播放过渡动画。

void setAnimationEnabled(bool e)

弹层打开/关闭过程是否播放过渡动画。

bool isExitAnimationEnabled() const

为 false 时,close() 跳过关闭(淡出)动画,瞬间隐藏;入场动画不受影响。 让调用方只去掉某个弹窗的关闭动画而不动共享默认值——例如 macOS 原生 vibrancy 背景上淡出(opacity effect)表现异常时。

void setThemeSource(QWidget* source)

无锚点 Popup 显示时用于继承局部主题的来源控件。

double popupProgress() const

弹层打开/关闭动画进度。

void setPopupProgress(double p)

弹层打开/关闭动画进度。

void setPosition(QWidget* relativeTo, const QPoint& localPos)

以指定 widget 的局部坐标定位 popup 左上角;relativeTo 为顶层窗口时 等价于相对顶层定位。坐标以可见卡片左上角为准,open() 自动补偿阴影 margin; 打开期间会跟随 relativeTo;relativeTo 被完全裁剪后自动关闭。未调用则 open() 时自动居中。

void setIsOpen(bool open)

逻辑请求打开态,不是动画完成态,也不是 QWidget 可见性。

void refreshBackdrop()

弹层打开期间,应用背景内容变化后刷新缓存背景。

void closeWithReason(CloseReason reason)

带关闭原因关闭;无参 close() 在未挂起原因时视为 Programmatic。

信号

void isOpenChanged(bool open)

逻辑请求打开态,不是动画完成态,也不是 QWidget 可见性。

void opening()

开始打开。兼容别名:aboutToShow()。

void closing(CloseReason reason)

开始关闭。aboutToHide() 是无参兼容别名。

void popupProgressChanged(double progress)

弹层打开/关闭动画进度。

void closePolicyChanged(ClosePolicy policy)

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

void modalChanged(bool modal)

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

void dimChanged(bool dim)

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

void dimOpacityChanged(double opacity)

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

void backdropBlurRadiusChanged(double radius)

未显式设置时,模态默认 4,非模态默认 0;显式值(包括 0)不随模态变化。

void animationEnabledChanged(bool enabled)

弹层打开/关闭过程是否播放过渡动画。

枚举

enum CloseFlag
  • NoAutoClose = 0
  • CloseOnPressOutside = 1 << 0
  • CloseOnEscape = 1 << 1
enum CloseReason

浮层关闭原因。

  • Programmatic = 0
  • ActionButton = 1
  • CloseButton = 2
  • LightDismiss = 3
  • TargetDestroyed = 4
  • Escape = 5

类型与别名

继承自 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