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

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

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

基础 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 绑定到 HoverHandlerhovered 属性,控制显示时机。
  • 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,支持点击触发提示。

已验证环境

相关推荐
wWYy.1 小时前
RPC详解
qt·rpc·php
Fu_Lin_2 小时前
Qt嵌入式从零基础到精通(01):Qt嵌入式开发全景图:从桌面Qt到ARM Linux
linux·arm开发·qt·qt5·嵌入式linux
海清河晏1113 小时前
Qt实战:从零构建美化登录界面
开发语言·c++·qt
Fu_Lin_3 小时前
《Qt嵌入式从零基础到精通》前言与阅读指南
开发语言·qt
mabing99319 小时前
Qt 生成条纹图
开发语言·qt
Fu_Lin_19 小时前
Qt 嵌入式从零基础到精通总纲
开发语言·qt·嵌入式·qt嵌入式
茯苓gao21 小时前
嵌入式开发笔记:Qt信号槽机制深度解析——从原理到实战的全方位指南
开发语言·笔记·嵌入式硬件·qt·学习
布朗克16821 小时前
Go 入门到精通-31-编码与序列化
开发语言·qt·golang·编码与序列化
Lyndon-李大鹏1 天前
QT-VS环境
开发语言·qt