Qt 半透明背景(遮罩)

简述

前些天从嵌入式Linux Qt4 切换到嵌入式Linux Qt5 开发平台,发现遮罩不能用了,原本半透明的背景变成了黑色,全网找遍资料,没有特别好的解决方案,无奈自己手撸撸一个,且测亲测好用。

测试环境
  • Qt5.6.2
  • Linux 4.1
  • Arm
方案一

透明背景只是显示在父窗口上,不能遮住整个屏幕,不理想

QFrame *f = new QFrame(this);
f->setGeometry(100,100,100,1280);
f->setStyleSheet("QFrame{background-color: rgba(0,0,0, 177);}");
f->show();
方案二

这种在amr 上不生效,在pc 上没问题,不过这个是整个QFrame 对象,包括子窗口统一透明处理

#ifndef __arm__

QFrame *f = new QFrame ();
f->setGeometry(200,100,100,1280);
QPalette p = f->palette();
p.setBrush(QPalette::Background, QColor(0,0,0));
f->setPalette(p);
f->setWindowOpacity(0.7f);
f->show();

#endif
方案三

这种和第一种差不多,但是透明背景是用的Dialog
并且 this 的第一个祖先必须是全屏的,否则遮罩(Dialog)显示区域就是遮罩父对象的区域

// arm pc 都有效
QDialog d(this->topLevelWidget()); //获得这个窗口最顶层的父对象
//d.setGeometry(300,100,100,1280);
d.setWindowFlags(Qt::FramelessWindowHint); //在arm 上,如果不去掉标题栏,背景会变成黑色
d.setStyleSheet
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值