赞
踩
当你想要在 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。