当你想要在 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