Qt 窗体透明、部件透明、部件阴影、不规则窗体效果

今天学习了几个好玩的小玩意,分别是窗体设置透明、部件设置透明、部件设置阴影效果与设置不规则窗体效果。


窗体透明

一、窗体透明,取值0~1

setWindowOpacity(数值);
0 - 1 :0透明,1无透明效果。

// 窗口透明属性,取值0~1
setWindowOpacity(0.7);

运行效果:
在这里插入图片描述

二、部件不透明,窗体背景完全透明

setWindowFlags(Qt::FramelessWindowHint);	// 设置窗体无边框风格
setAttribute(Qt::WA_TranslucentBackground);	// 设置窗体完全透明

此方式不会对窗体标题进行透明设置,所以得先将窗体标题隐藏。

运行效果:
在这里插入图片描述

三、重写绘图事件

需包含头文件:#include <QPainter>

protected:
	void paintEvent(QPaintEvent *event);


void testStyleSheet::paintEvent(QPaintEvent *event) {
	QPainter painter(this);
	// 重写绘制窗体矩形
	painter.fillRect(rect(), QColor(255, 255, 255, 50));
}

利用color第四个参数透明属性,取值范围0 - 255

此种方式在博主这里无法实现,目前还没找到原因。

部件透明

需包含头文件:#include <QGraphicsOpacityEffect>

// 部件设置透明
QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect;
opacityEffect->setOpacity(0.5);		// 设置透明度,取值 0 - 1
ui.label->setGraphicsEffect(opacityEffect);		// 部件设置透明属性

这里以QLabel为例,为了更好的体现效果,博主提前在label中插入了张图片。

运行截图:
在这里插入图片描述

部件阴影

需包含头文件:#include <QGraphicsDropShadowEffect>

// 阴影效果
QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect;
// 阴影色,透明度
shadowEffect->setColor(QColor(100, 150, 200));
// 阴影模糊度
shadowEffect->setBlurRadius(30);
// 阴影偏移值
shadowEffect->setOffset(20);
// 将阴影设置控件
ui.label->setGraphicsEffect(shadowEffect);

还是以QLabel为例

运行结果:
在这里插入图片描述

不规则窗体

注意:图片得是透明背景图!

获取博主素材图百度网盘链接:链接:https://pan.baidu.com/s/1Q1mBhLWB9TlYX2v7R0HCQA
提取码:cppp

在这里插入图片描述

  1. 加载图片

    QPixmap pixmap;
    // 加载图片
    pixmap.load("E:\\QTproject\\testMask\\testMask\\flower.png");
    
  2. ui文件中拖入一个QLabel控件,并删掉文本
    在这里插入图片描述

  3. 标签与窗体都设置与图片相同大小

    // 设置标签与图片大小一致
    ui.label->resize(pixmap.size());
    // 设置窗体与图片大小一致
    this->resize(pixmap.size());
    
  4. 设置遮罩

    // 设置遮罩
    setMask(pixmap.mask());
    
  5. 重写绘图事件

    protected:
    	void paintEvent(QPaintEvent *event);
    
    
    // 重写画图事件
    void testMask::paintEvent(QPaintEvent *event) {
    	QPainter painter(this);
    	// 图片绘制
    	painter.drawPixmap(0, 0, QPixmap("E:\\QTproject\\testMask\\testMask\\flower.png"));
    }
    

至此,步骤完毕,可以运行看到效果啦!
一朵大红花送给大家!

运行截图:
在这里插入图片描述
当然,这张素材像素比较大,所以显示运行窗体效果也就很大。

不过,是无法关闭,因为没有标题栏的“叉”按钮,为了可以退出程序,可以在代码中添加鼠标按下事件;当系统监测到鼠标左键按下时,进行关闭窗体。
代码如下:

protected:
	void mousePressEvent(QMouseEvent *event);



// 重写鼠标按下事件
void testMask::mousePressEvent(QMouseEvent *event) {
	// 鼠标按下为左键
	if (event->button() == Qt::LeftButton) close();
}

总结:
这几个小玩意还是挺好玩的,如果有这方便项目需求的小伙伴,希望此篇博客可以帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cpp_learners

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

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

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

打赏作者

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

抵扣说明:

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

余额充值