当前位置: 首页 > article >正文

Qt 实现透明可移动悬浮工具条

Qt之透明可移动悬浮工具条

1 摘要

浮动工具栏是一项极具人性化的功能,悬浮透明工具条通过保持界面最前端,确保用户随时可以看到提醒和记录的内容,不会被其他窗口遮挡,从而提高了信息的实时可见性‌。此外,用户无需频繁切换窗口,可以直接在悬浮界面上进行操作,如添加、查看、编辑等,大大提高了使用效率和便捷度‌。

2 悬浮工具条场景

悬浮透明工具条的主要作用包括提升用户体验、增强交互性和保持界面整洁:
•提升用户体验
悬浮透明工具条通过保持界面最前端,确保用户随时可以看到提醒和记录的内容,不会被其他窗口遮挡,从而提高了信息的实时可见性‌。此外,用户无需频繁切换窗口,可以直接在悬浮界面上进行操作,如添加、查看、编辑等,大大提高了使用效率和便捷度‌。
•增强交互性
悬浮透明工具条以透明的形式呈现,不会过度干扰用户正在进行的工作或界面显示,既能起到提醒作用,又能与其他任务和谐共存‌。这种设计使得工具条在不操作时不打扰用户,但在需要时又能快速找到并使用,增强了用户的交互体验。
•保持界面整洁
悬浮工具通常在大多数时候是不可见的,只有在用户需要时才会出现并吸引注意力。这种设计可以保持界面的干净整洁,避免界面过于杂乱‌。当用户将鼠标指针移动到某个对象上时,悬浮工具才会出现,移开后立即隐藏,确保了界面的整洁和用户的操作便捷性‌

3 功能实现

3.1 实现效果图

•背景透明:使用透明背景,以实现叠加到别到控制之上。
•拖拽移动:按下鼠标左键并拖动,松开鼠标后移动到制定位置。
•设置悬浮条位置:通过设置参数设置悬浮条位置。
•设置文本颜色:通过设置文本颜色改变按钮颜色。
•设置字符 图标:通过加载不同的字符图标库设置按钮图标。
在这里插入图片描述
在这里插入图片描述

鼠标拖拽功能

void mousePressEvent(QMouseEvent *event) override {
   
            // 处理鼠标按下事件
            if (event->button() == Qt::LeftButton) {
    //&&!btns.at(0)->rect().contains(event->pos())
                dragPosition = event->globalPos() - frameGeometry().topLeft();
                event->accept();
            }
        }

        void mouseMoveEvent(QMouseEvent *event) override {
   
            // 处理鼠标移动事件
            if (event->buttons() & Qt::LeftButton) {
   
                move(event->globalPos() - dragPosition);
                event->accept();
            }
        }

        void mouseReleaseEvent(QMouseEvent *event) override {
   
            // 处理鼠标释放事件
            event->accept();
        }

悬浮位置设置
在这里插入图片描述

 if (vertical)
 {
   
       btn->setFixedHeight(50);
       btn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
 } 
 else 
 {
   
       btn->setFixedWidth(50);
       btn->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
 }

文本颜色设置
在这里插入图片描述
字符文本设置

	   // 加载字体文件
        int fontId = QFontDatabase::addApplicationFont(":/Fonts/iconfont.ttf");
        QString fontFamily = QFontDatabase::

http://www.kler.cn/a/584974.html

相关文章:

  • c#面试题整理10
  • 纽扣电池缺陷分割数据集labelme格式28张2类别
  • 阶乘之和(信息学奥赛一本通-2033)
  • 【互联网性能指标】QPS/TPS/PV/UV/IP/GMV/DAU/MAU/RPS
  • Linux第七讲:基础IO
  • 记忆 `lower_bound` 和 `upper_bound`(或你实现的 `last_less_equal`)
  • 基于springboot vue前后端分离的网上书城
  • 单一责任原则在Java设计模式中的深度解析
  • 失踪人口回归之Java开发工程师面试记录第一篇
  • 接口正常被调用且返回数据但前端页面渲染失败,控制台报错Uncaught (in promise)
  • react对比vue的核心属性
  • 【水文模型】地理信息系统(ArcGIS)在水文水资源、水环境中的应用
  • VBA即用型代码手册:选择、转到Select、 Go To
  • 【Python】Linux 升级 Python 版本(源码安装)
  • 地理信息系统(ArcGIS)在水文水资源及水环境中的应用:空间数据管理‌、空间分析功能‌、‌可视化表达‌
  • 【后端】【django drf】Django DRF API 编写规范(程序设计规则)
  • # RAG 框架 # 一文入门 全链路RAG系统构建与优化 —— 架构、策略与实践
  • 2025 香港 Web3 嘉年华:全球 Web3 生态的年度盛会
  • 界面控件DevExpress Blazor UI v24.2新版亮点:支持.NET 9
  • 批量在多个在 Excel 工作表的的指定位置插入新的 Sheet 工作表