QT--气泡框的实现

提示:本文为学习记录,若有疑问,请联系作者,谦虚受教。

文章目录

  • 前言
  • 一、h文件
  • 二、CPP文件
  • 总结


前言

实现自定义的气泡框,类似QToolTip的使用


一、h文件

#ifndef CUSTOMTOOLTIP_H
#define CUSTOMTOOLTIP_H#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QTimer>// 自定义的气泡提示框类
class CustomTooltip : public QWidget {Q_OBJECT
public:QString m_strToolTipInfo;CustomTooltip(const QString &text, QWidget *parent = nullptr) : QWidget(parent, Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint) {QLabel *label = new QLabel(text, this);QVBoxLayout *layout = new QVBoxLayout(this);layout->addWidget(label);setLayout(layout);// 设置样式// setStyleSheet("QLabel { background-color: #ffffcc; border: 1px solid #8f8f91; border-radius: 5px; padding: 5px; }");setStyleSheet("QLabel{border:1px solid rgb(118, 118, 118); background-color: #2955a0; color:#ffffff; font-size:18px;border-radius: 5px;padding: 5px;} ") ;}
};#endif // CUSTOMTOOLTIP_H

二、CPP文件

    // 隐藏之前的气泡提示框(如果存在)if (m_tooltip != nullptr) {m_tooltip->hide();delete m_tooltip; // 也可以在这里删除它,如果你不再需要它m_tooltip = nullptr;}// 创建一个新的气泡提示框并显示它m_tooltip = new CustomTooltip(strDisplayInfo, this);m_tooltip->move(QCursor::pos()); // 将提示框移动到鼠标当前位置m_tooltip->show();

鼠标判断移动到其他位置时,气泡框消失

/********************************************************
*事件过滤器
********************************************************/
bool MainWindow::eventFilter(QObject *watched, QEvent *event) {if (watched == this && event->type() == QEvent::MouseButtonPress) {QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);if ( (!this->rect().contains(this->mapFromGlobal(mouseEvent->globalPos())))||  (!ui->tableView_Info->rect().contains(ui->tableView_Info->mapFromGlobal(mouseEvent->globalPos())))) {if (m_tooltip != nullptr) {m_tooltip->hide();}}}if (QEvent::WindowDeactivate == event->type()){if (m_tooltip != nullptr) {m_tooltip->hide();}}// 继续标准事件处理return QWidget::eventFilter(watched, event);
}

总结

善于总结,多进一步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

求第 N 个泰波那契数 | 动态规划

1.第 N 个泰波那契数 题目连接&#xff1a;1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 2.什么是动态规划 在解决这道问题之前…

数据架构规划与设计

1.数据库设计与类的设计融合 对类和类之间关系的正确识别是数据模型的关键所在。要想将建模过程缩减为一个简单的、逐步进行的过程是不太可能的。从本质上讲&#xff0c;建模是一项艺术。对一个给定的复杂情况而言&#xff0c;不存在唯一正确的数据模型&#xff0c;然而却存在…

2024年5月份最新独角数卡使用USDT详细小白教程

直观配套视频教程 2024年5月份最新独角数卡安装及USDT使用详细小白教程 1、创建服务器 Centos或者Ubuntu2、宝塔面板开心版安装寶塔 Linux 面版 8.0.5 開心版 - 2024年1月12日 - 开心专区 - 异次元 - Powered by Discuz!Centos安装命令&#xff08;默认安装是 8.0.1 直接在线升…

张大哥笔记:改变自己,才是改变一切的开始

人往往有一种惰性&#xff0c;总喜欢把希望寄托于别人&#xff01;比如会将注意力投向外部因素如环境、他人或命运从而期望为我们的生活带来突破和转机。但现实往往是残酷的&#xff0c;不会发生任何改变的&#xff01;真正的改变来自于自己&#xff0c;自我革新才是改变整个局…

89.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-游戏中使用的哈希算法逆向分析

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

第九节 设计 Starter 不能忽视的细节

我们要定义一个生产可用的 Starter &#xff0c;还有几个细节&#xff0c;我们必须要关注。这些细节可以很好的帮助我们写出更优秀的 Starter 一、maven 包依赖 每一个 Starter&#xff0c;可以理解为一个 Jar&#xff0c;这个 Jar 包&#xff0c;如果被其他应用引用&#xf…

Sentry,一款超级牛逼跟踪系统Pyhton库

Sentry 库概述 Sentry 是一个开源的实时错误跟踪系统,用于监视应用程序中的错误并提供详细的错误报告.它可以帮助开发人员快速诊断和解决问题,以确保应用程序稳定运行. 安装与使用 # 首先安装 Sentry Python SDK&#xff1a;pip install sentry-sdk设置 DSN&#xff08;Data…

贪心算法--区间调度问题

贪心算法 引言 贪心算法是一种简单而有效的算法设计技巧&#xff0c;在解决一些优化问题时具有广泛的应用。其基本思想是通过每一步的局部最优选择&#xff0c;最终达到全局最优解。贪心算法通常不会回溯之前的决策&#xff0c;而是根据当前状态作出最优决策&#xff0c;因此…

面试准备-八股【面试准备】

面试准备-八股【面试准备】 Java基础解决hash冲突的方法try catch finallyException与Error的包结构OOM你遇到过哪些情况&#xff0c;SOF你遇到过哪些情况线程有哪些基本状态?Java IO与 NIO的区别堆和栈的区别对象分配规则notify()和notifyAll()有什么区别&#xff1f;sleep()…

Docker(四)容器相关操作及问题处理

目录 一、进入、退出容器操作 二、查看Docker 容器的配置文件 方法一&#xff1a;进入docker容器内进行查看 方法二&#xff1a;通过数据卷挂载方式查看配置文件 方法三&#xff1a;使用Docker可视化工具查看配置文件 三、容器与宿主机时间同步 方法一&#xff1a;创建启…

3D模型旋转显示不全怎么办---模大狮模型网

在3D建模和渲染过程中&#xff0c;我们有时会遇到旋转模型时显示不全的问题。这种情况可能由多种原因造成&#xff0c;包括模型本身的问题、软件设置不当、硬件配置不足等。本文将为您详细介绍几种可能的解决方法&#xff0c;帮助您解决3D模型旋转显示不全的问题。 一、检查模型…

nosql存储大文件

NoSQL数据库如MongoDB可以存储大型文件&#xff0c;但通常不是直接作为BLOB存储在文档内。相反&#xff0c;它们被设计为在多个节点上自动分区&#xff0c;并且可以存储大量的数据。 以下是使用MongoDB存储大文件的一个基本示例&#xff1a; 首先&#xff0c;确保你已经安装了…

Mask R-CNN实战

一、源码和数据集的准备 获取git开源项目代码 https://github.com/matterport/Mask_RCNN 一下载2.1的前三个文件&#xff0c;和2.0的第一个h5文件&#xff0c;coco.h5是预训练权重&#xff0c;也放入源码 项目文件结构如下&#xff1a; samples/logs:训练模型保存的位置 配置…

LINUX系统编程:命名管道

匿名管道的通信只能在&#xff0c;有血缘关系的进程中&#xff0c;本质就是&#xff0c;子进程会拷贝一份父进程的文件描述符表&#xff0c;父子进程就可以看到操作系统的同一块资源&#xff08;文件&#xff09;&#xff0c;以这块资源为媒介进行通信。 命名管道&#xff0c;…

STM32——DAC篇(基于f103)

技术笔记&#xff01; 一、DAC简介&#xff08;了解&#xff09; 1.1 DAC概念 传感器信号采集改变电信号&#xff0c;通过ADC转换成单片机可以处理的数字信号&#xff0c;处理后&#xff0c;通过DAC转换成电信号&#xff0c;进而实现对系统的控制。 1.2 DAC的特性参数 1.3…

文件管理采用索引节点法

某操作系统文件管理采用索引节点法。每个文件的索引节点有8个地址项&#xff0c;每个地址项大小为4字节&#xff0c;其中5个地址项为直接地址索引&#xff0c;2个地址项是一级间接地址索引&#xff0c; 1个地址项是二级间接地址索引&#xff0c;磁盘索引块和磁盘数据块大小均为…

Vue3实战笔记(41)—自己封装一个计时器Hooks

文章目录 前言计时器钩子总结 前言 在Vue项目中&#xff0c;封装一个计时器挂钩&#xff08;Hook&#xff09;是一种实用的技术&#xff0c;它允许你在组件中方便地管理定时任务&#xff0c;如倒计时、计时器等&#xff0c;而无需在每个使用场景重复编写相同的逻辑代码。 计时…

大语言模型的工程技巧(一)——GPU计算

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下&#xff1a;regression2chatgpt/ch07_autograd/gpu.ipynb 本文将讨论如何利用PyTorch实现GPU计算。本…

常见的几种数据库通过SQL对表信息进行查询

一、前言 我们查询数据库表的信息&#xff0c;一般都使用界面化的连接工具查看&#xff0c;很少使用SQL语句去查&#xff0c;而且不同的数据库SQL语句又各自有差异。但如果通过代码去获取数据库表的信息&#xff0c;这时就需要通过SQL语句去查了&#xff0c;这个在逆向代码生成…

翻转列表-力扣

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; …