QT 在label上透明绘图

QT在label上实现透明绘图
本文介绍如何在QT中创建一个透明的标签(TransparentLabel),该标签能够显示在红色背景的标签上。通过点击“添加图片”按钮,可以在红色背景上展示透明图像,透明度可通过doublespinbox进行调节。主要步骤包括新建TransparentDemo工程,创建 TransparentLabel 类并重写 paintEvent 函数,以及在主线程中实现按钮槽函数等。

先看效果,点击《添加图片》按钮,显示图片(在红色背景label控件上再添加一层label显示图像,这个label显示的图像是透明的),调节doublespinbox,透明度可以调节。
在这里插入图片描述

一、新建TransparentDemo工程
在这里插入图片描述

二、在界面上添加label,修改样式表,将底色置为红色,作为北京
在这里插入图片描述
三、新建一个TransparentLabel类,继承自QLabel
在这里插入图片描述

此时,工程包括文件
在这里插入图片描述
五、在transparentlabel.h中添加
头文件

#include <QLabel>
#include <QPainter>

添加构造函数

TransparentLabel(QWidget *parent=nullptr);

添加重绘函数paintEvent

void paintEvent(QPaintEvent *) override;

如下图

#ifndef TRANSPARENTLABEL_H
#define TRANSPARENTLABEL_H

#include <QLabel>
#include <QPainter>
class TransparentLabel : public QLabel
{
   
   
public:
    TransparentLabel(
Qtlabel标签上绘图有多种方法,以下为你详细介绍: ### 直接在重写的`paintEvent`函数中绘图 在`transparentlabel.cpp`中实现构造函数和重绘函数,示例代码如下: ```cpp #include "transparentlabel.h" TransparentLabel::TransparentLabel() { } TransparentLabel::TransparentLabel(QWidget* parent):QLabel(parent){ } void TransparentLabel::paintEvent(QPaintEvent *){ // 读取图片路径 QString imagePath = "D:\\picture\\ming3.png"; // 读取图片 QPixmap pixmap(imagePath); // 获取当前label的大小 QRect rect = this->geometry(); // 将图像大小缩放适合label QPixmap scaledPixmap = pixmap.scaled(QSize(rect.width(), rect.height())); // 在label绘图 QPainter painter(this); // 设置透明度 painter.setOpacity(0.4); // 绘图 painter.drawPixmap(0, 0, scaledPixmap); // 将此label放在最上层 this->raise(); } ``` 上述代码在`paintEvent`函数中完成了在`label`上绘制图片的操作,包括读取图片、调整大小、设置透明度等步骤 [^2]。 ### 动态调整透明绘图 可以给自定义的`TransparentLabel`类添加`double transparency;`变量,通过`ui`的`doublespinbox`调整透明参数,示例代码如下: ```cpp // 在MainWindow类中 void MainWindow::on_doubleSpinBox_valueChanged(double arg1) { transparentLabel->transparency = arg1; transparentLabel->update(); } ``` 此方法可以实现动态调整在`label`上绘图透明度 [^3]。 ### 绘制图形 利用`QPainter`在`label`上绘制图形,示例代码如下: ```cpp // 设置画布大小以及绘图格式,绘图格式可在Qt助手中查看 QImage img(600, 600, QImage::Format_RGB32); // 填充色为白色,默认为黑色 img.fill(Qt::white); QPainter painter(&img); // 画笔颜色 painter.setPen(Qt::green); // 画圆 painter.drawEllipse(QPoint(100, 100), 100, 100); img.save("C:\\Users\\14725\\Desktop\\img.png"); ``` 该代码展示了如何使用`QPainter`在`QImage`上绘制圆形,并将绘制结果保存为图片 [^4]。 ### 自定义`QLabel`类绘图 可以构建自定义的`QLabel`类用于绘图,示例如下: ```cpp class DrawGraphLab : public QLabel { Q_OBJECT public: explicit DrawGraphLab(QWidget* parent = 0); }; ``` 通过自定义`QLabel`类,可以在其中重写绘图相关的函数,实现特定的绘图需求 [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值