要自定义 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 效果。

Qt 自定义 QLabel 实现 Tooltip 显示效果

原文地址: https://www.cveoy.top/t/topic/qC87 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录