Qt 自定义 QLabel 实现 Tooltip 显示效果
要自定义 QLabel 实现 tooltip 的显示效果,可以继承 QLabel 并重写 mouseMoveEvent 和 paintEvent 方法。
首先,在头文件中定义一个新的类,继承自 QLabel:
#include <QLabel>
class CustomLabel : public QLabel
{
Q_OBJECT
public:
CustomLabel(QWidget *parent = nullptr);
protected:
void mouseMoveEvent(QMouseEvent *event) override;
void paintEvent(QPaintEvent *event) override;
private:
bool m_hovered;
};
然后,在实现文件中实现自定义的 QLabel 类:
#include "customlabel.h"
#include <QPainter>
CustomLabel::CustomLabel(QWidget *parent)
: QLabel(parent)
{
m_hovered = false;
}
void CustomLabel::mouseMoveEvent(QMouseEvent *event)
{
Q_UNUSED(event)
// 在鼠标移动到 QLabel 上时,设置 hovered 标志为 true,调用 update() 函数来触发重绘
m_hovered = true;
update();
}
void CustomLabel::paintEvent(QPaintEvent *event)
{
QLabel::paintEvent(event);
if (m_hovered) {
// 绘制 tooltip 的背景
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(255, 255, 255, 200));
painter.drawRect(rect().adjusted(5, 5, -5, -5));
// 绘制 tooltip 的文本
painter.setPen(Qt::black);
painter.drawText(rect().adjusted(10, 10, -10, -10), Qt::AlignCenter, toolTip());
m_hovered = false;
}
}
在使用这个自定义的 QLabel 时,可以设置 tooltip 并将其安装到需要显示 tooltip 的窗口中:
CustomLabel *label = new CustomLabel(this);
label->setToolTip('This is a tooltip');
label->setText('Hover me');
label->move(100, 100);
label->show();
这样,当鼠标移动到 QLabel 上时,会显示自定义的 tooltip 效果。
原文地址: https://www.cveoy.top/t/topic/qC87 著作权归作者所有。请勿转载和采集!