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

C++Qt做一个鼠标在按钮上悬浮3s显示一个悬浮窗口

当你想要在 Qt 中创建一个自定义按钮并添加悬浮窗口的功能时,你可以通过继承 QPushButton 类来实现。下面是一个示例代码,演示了如何创建一个自定义按钮类 HoverButton,并在鼠标悬浮在按钮上 3 秒后显示一个悬浮窗口,窗口包含图片和文字。

#include <QPushButton>
#include <QTimer>
#include <QMouseEvent>
#include <QToolTip>
#include <QHBoxLayout>
#include <QLabel>
#include <QPixmap>class HoverWindow : public QWidget {
public:HoverWindow(QWidget *parent = nullptr) : QWidget(parent) {// 创建悬浮窗口setWindowFlags(Qt::ToolTip);setLayout(new QHBoxLayout);// 添加图片QPixmap image("path_to_image.jpg");  // 替换为你的图片路径QLabel *imageLabel = new QLabel;imageLabel->setPixmap(image);layout()->addWidget(imageLabel);// 添加文字QLabel *textLabel = new QLabel("Your text here");layout()->addWidget(textLabel);}
};class HoverButton : public QPushButton {Q_OBJECT
public:HoverButton(QWidget *parent = nullptr) : QPushButton(parent) {// 创建悬浮窗口hoverWindow = new HoverWindow(parent);// 创建定时器hoverTimer = new QTimer(this);hoverTimer->setInterval(3000);  // 设置定时器间隔为3秒hoverTimer->setSingleShot(true); // 设置定时器为单次触发connect(hoverTimer, &QTimer::timeout, this, &HoverButton::showHoverWindow);}protected:void enterEvent(QEvent *event) override {// 鼠标悬浮在按钮上时启动定时器hoverTimer->start();QPushButton::enterEvent(event);}void leaveEvent(QEvent *event) override {// 鼠标离开按钮时停止定时器hoverTimer->stop();QPushButton::leaveEvent(event);}private slots:void showHoverWindow() {// 显示悬浮窗口QPoint globalPos = mapToGlobal(QPoint(0, height()));hoverWindow->move(globalPos);hoverWindow->show();}private:QTimer *hoverTimer;HoverWindow *hoverWindow;
};

在这个示例中,我们创建了一个名为 HoverButton 的自定义按钮类,继承自 QPushButton。在这个自定义按钮类中,我们重写了 enterEvent 和 leaveEvent 事件处理函数,以便在鼠标悬浮和离开按钮时启动和停止定时器。当定时器超时时,会显示悬浮窗口。

请替换示例中的 “path_to_image.jpg” 为你实际的图片路径,并根据你的实际需求修改代码。


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/3Zqhgt

http://www.lryc.cn/news/372514.html

相关文章:

  • sslh一键在一个端口上运行多个服务(KALI工具系列二十三)
  • Vue27-内置指令04:v-once指令
  • Pytorch环境配置的方法
  • 数字化制造案例分享以及数字化制造能力评估(34页PPT)
  • 搜维尔科技:特斯拉称工厂内有两台人形机器人开始自主工作
  • SIGMOD 2024 | 时空数据(Spatial-Temporal)和时间序列(Time Series)论文总结
  • 学习分享-分布式 NoSQL 数据库管理系统Cassandra以及它和redis的区别
  • Android 汉字转拼音(两行就够了)
  • JVM
  • MySQL锁机制和事务管理:如何处理并发和隔离性
  • 特别名词Test Paper7
  • 2的n次方表格
  • EVS9329-ES驱动器EVS9329ES可议价
  • JSON、yam|fIProperties
  • 关于投标中的合理均价基准差径靶心法(KIMI回答)
  • 好久没写文章
  • 卡塔尔.巴林:海外媒体投放-宣发.发稿效果显著提高
  • 【成品设计】基于STM32的单相瞬时值反馈逆变器
  • 浏览器实时播放摄像头数据并通过 Yolo 进行图像识别
  • redis清空list
  • 汽车油耗NEDC与WLTP有什么区别?以及MATLAB/Simulink的汽车行驶工况仿真
  • 【Python】已解决报错:AttributeError: module ‘json‘ has no attribute ‘loads‘解决办法
  • (5)按钮输入
  • 嵌入式开发、C++后台开发、C++音视频开发怎么选择?
  • 高考志愿填报,大学读什么专业比较好?
  • 33 _ 跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性?
  • C++入门小结
  • Java 开发实例:Spring Boot+AOP+注解+Redis防重复提交(防抖)
  • 使用difflib实现文件差异比较用html显示
  • 【文末附gpt升级秘笈】AI热潮降温与AGI场景普及的局限性