QML ToolTip 组件:图标、多行文本与阴影

ToolTip 的 contentItem 可以塞入完整布局。这篇文章做一个带图标、多行文本和阴影的富文本提示。

富文本 Tooltip

悬停在粉色矩形上,显示带图标、多行文本和阴影的 Tooltip。

演示代码

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

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

        TitleSeparator {
            title: "富文本 Tooltip"
            description: "在 contentItem 中使用布局、图标与多行文本,并为背景添加阴影效果"
        }

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

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

                Text {
                    anchors.centerIn: parent
                    text: "富文本 Tooltip"
                }

                ToolTip {
                    id: richTooltip
                    delay: 500
                    timeout: 5000
                    visible: richMA.hovered

                    contentItem: ColumnLayout {
                        Text {
                            text: "富文本提示"
                            font.bold: true
                            color: "#E91E63"
                        }
                        Image {
                            Layout.preferredWidth: 32
                            Layout.preferredHeight: 32
                            source: "qrc:/qt/qml/qml_tooltip/images/info.svg"
                        }
                        Text {
                            text: "包含图标和多行文本的tooltip"
                            color: "#333333"
                        }
                    }

                    background: Rectangle {
                        color: "#FFFFFF"
                        radius: 8
                        border.color: "#E0E0E0"
                        border.width: 1

                        layer.enabled: true
                        layer.effect: DropShadow {
                            transparentBorder: true
                            horizontalOffset: 2
                            verticalOffset: 2
                            radius: 8.0
                            samples: 17
                            color: "#80000000"
                        }
                    }
                }

                HoverHandler {
                    id: richMA
                }
            }
        }

        Item { Layout.fillHeight: true }
    }
}

关键逻辑解析

  • contentItem 用 ColumnLayout 组合标题、图标和说明文字。
  • Image 的 source 使用 qrc:/ 资源路径,图片需提前加入资源文件。
  • 背景通过 layer.enabled + DropShadow 实现阴影,需要导入 Qt5Compat.GraphicalEffects。
  • transparentBorder: true 避免阴影被裁切。

适用场景:复杂信息提示、带图标的操作说明、卡片式浮层。

运行验证

  1. Qt Creator 打开 qml_tooltip/CMakeLists.txt;
  2. 按 Ctrl+R 运行;
  3. 悬停在粉色矩形上,观察富文本、图标和阴影效果。

扩展复用方向

  • 在 contentItem 里加 Slider 或 Button,做成可交互的浮层。
  • 封装成 InfoTooltip 组件,传入标题、图标、说明文字即可复用。

已验证环境:

相关推荐
西飘客3 小时前
vs 怎么根据dll 生成lib文件
c++·qt
bkspiderx3 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
半杯咖啡半行码6 小时前
Qt开发实战:数据库、MV 模式、QProcess与串口通信全攻略
数据库·qt
时间的拾荒人7 小时前
Qt 界面优化:绘图详解 —— 从基础图形到图片处理
开发语言·qt·面试
MayZork7 小时前
Qt 文件操作:QSaveFile 与 QTemporaryFile(含 QTemporaryDir)实战
开发语言·qt
半杯咖啡半行码11 小时前
Qt 开发基础:版本演进、常用工具与多平台安装
开发语言·qt
qq_4017004116 小时前
Qt Signal Mapper:一堆按钮,怎么共用一个槽函数
开发语言·qt
Python图像识别16 小时前
35-【2027毕设】YOLO11中草药检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
Lhan.zzZ17 小时前
Qt/QML:业务记录单展示、签名确认与 PDF 导出开发
c++·qt·pdf
Quz1 天前
QML 动画选择:GIF与Lottie 的区别,以及 Qt 6.8 与 6.11 的 Lottie 实现差异
qt