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

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);
}

总结

善于总结,多进一步。

相关文章:

  • 搭建LNMP服务器
  • 如何利用curl命令访问Kubernetes API server
  • 2024电工杯A题详细思路代码分析数学建模:园区微电网风光储协调优化配置
  • SpringBoot多数据源启动出现循环依赖问题
  • AI网络爬虫:批量爬取电视猫上面的《庆余年》分集剧情
  • uniapp 快手小程序隐藏scrollbar
  • 59. UE5 RPG AI行为树的任务
  • 【AD21】BOM表文件的输出
  • 2024年ai知识库:特点、应用与搭建
  • 12、电科院FTU检测标准学习笔记-双路电源自动切换
  • SQLite数据库免改造透明加密解决方案:给数据加把锁
  • Flutter容器
  • SpheroGPT: 声控自然语言编程 AI 玩具 Demo 具身智能 图文解说 完全开源机器人
  • 【学习笔记】Windows GDI绘图(一)图形概述、直线、曲线和图形
  • Mysql与Navicat可视化命令大全 ----项目实战
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CSS居中完全指南——构建CSS居中决策树
  • Git 使用集
  • go语言学习初探(一)
  • Java 多线程编程之:notify 和 wait 用法
  • js递归,无限分级树形折叠菜单
  • js写一个简单的选项卡
  • LeetCode算法系列_0891_子序列宽度之和
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • redis学习笔记(三):列表、集合、有序集合
  • session共享问题解决方案
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vue组件定义
  • 简单易用的leetcode开发测试工具(npm)
  • 理解在java “”i=i++;”所发生的事情
  • 聊聊directory traversal attack
  • 驱动程序原理
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​Python 3 新特性:类型注解
  • # linux从入门到精通(三)
  • #LLM入门|Prompt#3.3_存储_Memory
  • #stm32整理(一)flash读写
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (4)(4.6) Triducer
  • (二)原生js案例之数码时钟计时
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (源码分析)springsecurity认证授权
  • (转)Linux下编译安装log4cxx
  • ***利用Ms05002溢出找“肉鸡
  • .net wcf memory gates checking failed
  • /bin/bash^M: bad interpreter: No such file or directory
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [20171113]修改表结构删除列相关问题4.txt
  • [Algorithm][动态规划][01背包问题][目标和][最后一块石头的重量Ⅱ]详细讲解
  • [c#基础]DataTable的Select方法
  • [CSS]盒子模型