QML ToolTip 组件:延迟提示与自定义外观

ToolTip 是 QML 里给控件加悬停提示的附加类型。这篇文章讲基础用法和自定义样式。

  • 基础 Tooltip --- 延迟、超时与悬停触发
  • 自定义样式 --- 用 contentItem 和 background 改外观

基础 Tooltip

悬停在蓝色矩形上,500ms 后弹出提示,5s 后自动消失。

演示代码

qml 复制代码
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

FadeInAnimation {
    ColumnLayout {
        anchors.fill: parent
        anchors.margins: 20
        spacing: 15

        TitleSeparator {
            title: "基础 Tooltip"
            description: "使用 ToolTip 附加类型在悬停时展示提示,可设置延迟与超时时间"
        }

        RowLayout {
            Layout.preferredHeight: 120
            Layout.alignment: Qt.AlignHCenter
            spacing: 20

            Rectangle {
                Layout.preferredWidth: 120
                Layout.preferredHeight: 40
                color: "lightblue"
                radius: 4

                Text {
                    anchors.centerIn: parent
                    text: "基础 Tooltip"
                }

                ToolTip {
                    text: "这是一个基础的tooltip示例"
                    delay: 500
                    timeout: 5000
                    visible: basicMA.hovered
                }

                HoverHandler {
                    id: basicMA
                }
            }
        }

        Item { Layout.fillHeight: true }
    }
}

关键逻辑解析

  • ToolTip 作为附加类型直接写在目标控件内部。
  • visible: basicMA.hovered 绑定到 HoverHandler 的 hovered 属性,控制显示时机。
  • delay: 500 表示悬停 500ms 后才显示;timeout: 5000 表示显示 5s 后自动隐藏。

适用场景:按钮提示、图标说明、表单字段解释。

自定义样式

悬停在绿色矩形上,显示蓝色背景、白色粗体文字的 Tooltip。

演示代码

qml 复制代码
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

FadeInAnimation {
    ColumnLayout {
        anchors.fill: parent
        anchors.margins: 20
        spacing: 15

        TitleSeparator {
            title: "自定义样式"
            description: "通过自定义 contentItem 与 background 定制 Tooltip 的文字与背景外观"
        }

        RowLayout {
            Layout.preferredHeight: 120
            Layout.alignment: Qt.AlignHCenter
            spacing: 20

            Rectangle {
                Layout.preferredWidth: 120
                Layout.preferredHeight: 40
                color: "lightgreen"
                radius: 4

                Text {
                    anchors.centerIn: parent
                    text: "自定义样式"
                }

                ToolTip {
                    id: customTooltip
                    text: "这是一个自定义样式的tooltip"
                    delay: 500
                    timeout: 5000
                    visible: customMA.hovered

                    contentItem: Text {
                        text: customTooltip.text
                        font.bold: true
                        color: "white"
                    }

                    background: Rectangle {
                        color: "#2196F3"
                        radius: 6
                        border.color: "#1976D2"
                        border.width: 1
                    }
                }

                HoverHandler {
                    id: customMA
                }
            }
        }

        Item { Layout.fillHeight: true }
    }
}

关键逻辑解析

  • contentItem 替换 Tooltip 的文本区域,可以改字体、颜色、对齐方式。
  • background 替换 Tooltip 的背景,支持圆角、边框、渐变色。
  • 文字内容仍通过 text 属性设置,contentItem 里引用 customTooltip.text。

适用场景:统一 UI 风格、深色模式提示、品牌色提示框。

运行验证

  1. Qt Creator 打开 qml_tooltip/CMakeLists.txt;
  2. 按 Ctrl+R 运行;
  3. 分别悬停在两个矩形上,观察延迟、样式变化。

扩展复用方向

  • 把 ToolTip 封装成独立组件,统一项目内的提示风格。
  • 用 MouseArea 代替 HoverHandler,支持点击触发提示。

已验证环境:

相关推荐
扶尔魔ocy9 小时前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行并进行态势标绘(四)
qt·opengl·osg
橙橙笔记13 小时前
QT安卓软件的制作
android·git·qt·软件
芦芭荞13 小时前
QT使用xml模版生成word文档
xml·qt·word
mengzhi啊13 小时前
qt把结构体数据存入json文件
qt·json
kaixin_learn_qt_ing14 小时前
写入二进制文件(Qt)
qt
尘中远16 小时前
QWT7 的科学 Colormap 色彩评估:QwtColorMapPreset 22 种预设的感知均匀性与场景化选
qt·qwt·科学绘图·科学配色
宿州派大星21 小时前
Python实战:PyQt5 + OpenCV + Dlib 打造AI桌面应用
人工智能·python·qt
长沙红胖子Qt1 天前
Qt+TiePieHS3开发笔记(二):HS3发送器发出内置波形、直连示波器,示波器检测内置波形Demo
qt·示波器·tiepiehs3·发生器·同步发射和示波器采集
陈年老古董1 天前
PyQt5 入门指南:环境搭建、PyCharm 外部工具配置与登录界面实战
开发语言·qt·pycharm
zhanghaha13141 天前
Qt 类完整例程【逐词拆解 + 逐步骤执行保姆教程】
开发语言·qt