QLabel实现一个透明窗体效果

显示效果:

原理 

        在C++中使用Qt框架时,若您希望将一个QLabel(或任意QWidget)的透明度设置为80%,这通常涉及到调整窗口部件的不透明度属性,而非直接修改其背景色的透明度(尽管两者效果相似)。Qt提供了一个便捷的方法setWindowOpacity来全局性地调整一个窗口部件及其所有子部件的不透明度。

        然而,需要注意的是,setWindowOpacity会影响整个窗口部件及其所有子部件的透明度,而不仅仅是背景。如果您只想改变背景而不影响文本或其他子部件,那么您需要像之前那样自定义绘制背景。所以在本实例重重写了paintEvent方法,重画背景。

        通过setStyleSheet重置了显示字体的颜色。

代码

#ifndef TRANSPARENTLABEL_H
#define TRANSPARENTLABEL_H

#include <QLabel>
#include <QObject>
#include <QWidget>

class TransparentLabel : public QLabel
{
    Q_OBJECT
public:
    TransparentLabel(QWidget *parent = nullptr);

    // QWidget interface
protected:
    virtual void paintEvent(QPaintEvent *event) override;
};

#endif // TRANSPARENTLABEL_H
#include "transparentlabel.h"
#include <QPainter>
TransparentLabel::TransparentLabel(QWidget *parent):QLabel(parent)
{
    setAttribute(Qt::WA_TranslucentBackground);
    this->setWindowOpacity(0.7);
    //设置字体颜色为白色
    this->setStyleSheet("color: white;");
}

void TransparentLabel::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    // 填充背景色
    QColor backgroundColor(128, 128, 128, 80); // 灰色,透明度为204(80%的255)
    painter.fillRect(rect(), backgroundColor);

    // 调用父类的paintEvent以绘制文本或其他内容
    QLabel::paintEvent(event);
}

main.cpp

#include <QApplication>
#include "transparentlabel.h"
int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    TransparentLabel w;
    w.setText("hello world");
    w.show();
    return a.exec();
}

小结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千册

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值