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

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 10:14:06       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 10:14:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 10:14:06       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 10:14:06       20 阅读

热门阅读

  1. 【Ant-Design-Vue动态表头并填充数据】

    2024-06-12 10:14:06       9 阅读
  2. 图像处理中的图像分割

    2024-06-12 10:14:06       8 阅读
  3. Ubuntu 22, CURL 分块上传文件C++代码实现

    2024-06-12 10:14:06       10 阅读
  4. 利用Axios封装及泛型实现定制化HTTP请求处理

    2024-06-12 10:14:06       9 阅读
  5. idea快捷键

    2024-06-12 10:14:06       10 阅读