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

2024-06-13 07:44

本文主要是介绍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

这篇关于C++Qt做一个鼠标在按钮上悬浮3s显示一个悬浮窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056688

相关文章

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停