Qt 中设置窗体(QWidget)透明度的几种方法

news2025/1/14 0:44:36

Qt 中设置窗体(QWidget)透明度的几种方法


1. 设置窗体的背景色

在构造函数里添加代码,需要添加头文件qpalette或qgui

QPalette pal = palette(); 
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00)); 
setPalette(pal);

通过设置窗体的背景色来实现,将背景色设置为全透。

效果: 窗口整体透明,但窗口控件不透明,QLabel控件只是字显示,控件背景色透明; 窗体客户区完全透明。


2. 使用函数

setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);//去掉标题栏
setAttribute(Qt::WA_TranslucentBackground, true);//设置窗口背景透明

同样在构造函数中,效果和第一种方法相同。


3. 窗口及其上面的控件都半透明

setWindowOpacity(0.7);

这个函数可以分10个等级调整透明度,配合QSlider控件可以做成控制条 效果:窗口及控件都半透明。

自己注释:

直接设置setWindowOpacity函数应该不起作用,需要设置窗体的属性:

this->setAttribute(Qt::WA_WState_WindowOpacitySet);

CSDN QT大纲:Qt开发必备技术栈学习路线和资料

4. 窗口整体不透明,局部透明

在Paint事件中使用Clear模式绘图。

void TestWindow::paintEvent( QPaintEvent* )
{ 
    QPainter p(this);
    p.setCompositionMode( QPainter::CompositionMode_Clear );
    p.fillRect( 10, 10, 300, 300, Qt::SolidPattern ); 
}

试验效果:绘制区域全透明。如果绘制区域有控件不会影响控件。


5. 使用qss样式表设置窗体透明

QWidget* widget = new QWidget();
widget->setObjectName("wid");
widget->setStyleSheet("QWidget#wid{background-color: rgba(255,0,0,0.5);}");
widget->show();

rgba(255,255,255,1)中参数解释:

r【read】 表示:红色,范围:0-255,

g【green】表示:绿色,范围:0-255,

b【blue】 表示:蓝色,范围:0-255,

a【alpha】表示:透明度,范围:0-1,0表示全透明, 1表示不透明;

补充: 如果QWidget 的子类窗口采用setStyleSheet 设置背景色无效,需要加上setAttribute(Qt::WA_StyledBackground);
目的是脱离父窗口的样式。


6. 设置窗体颜色渐变

(1)渐变颜色设置有:qlineargradient(线性渐变颜色设置),qradialgradient(辐射渐变),qconicalgradient(圆锥形渐变)。

渐变方式

解释

QLinearGradient:

显示从起点到终点的渐变。

QRadialGradient:

以圆心为中心显示渐变。

QConicalGradient:

围绕一个中心点显示渐变。

QGradient::PadSpread :

填充区域内最接近的停止颜色。这是默认的。

QGradient::RepeatSpread :

在区域外继续重复填充。

QGradient::ReflectSpread :

在区域外反射填充。

(2)渐变过程:x1->x2 从左向右渐变;y1->y2 从上向下渐变。如果只有x相等,则表示垂直线性渐变,如果只有y相等,则表示平行线性渐变,否则就是斜角线性渐变。

(3)左右渐变

QLabel#label{
                background-color: qlineargradient(x1:0, y1:0, x2:1, y2:0,
                stop:0 rgba(255,0,0,1),stop:1 rgba(0,255,0,1));
            }

效果:

(4)上下渐变

QLabel#label{
                background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,
                stop:0 rgba(255,0,0,1),stop:1 rgba(0,255,0,1));
            }

效果:

(5)左右上下 渐变

QLabel#label{
                background-color: qlineargradient(x1:0, y1:0, x2:1, y2:1,
                stop:0 rgba(255,0,0,1),stop:1 rgba(0,255,0,1));
            }

效果:

 

(6)x1,x2,y1,y2都是设置成0或者1,颜色都一样是红色

QLabel#label{
                background-color: qlineargradient(x1:1, y1:1, x2:1, y2:1,
                stop:0 rgba(255,0,0,1),stop:1 rgba(0,255,0,1));
            }

效果:

(7)增加多个渐变点

QLabel#label{
                background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0,
                stop:0 rgba(255,0,0,1),stop:0.5 rgba(0,255,0,1),stop:1 rgba(0,0,255,1));
            }

效果:

 

(8)辐射渐变

以圆心为中心显示渐变。(cx, cy)是中点,半径(radius)是以中点为圆心的圆的半径,(fx, fy)是渐变的起点。

QLabel#label{
        background-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5,
        stop:0 rgba(105, 105, 0, 255),
        stop:0.19397 rgba(0, 55, 55, 255),
        stop:0.202312 rgba(80, 80, 0, 255),
        stop:0.495514 rgba(0, 105, 105, 255),
        stop:0.504819 rgba(0, 188, 188, 255),
        stop:0.79 rgba(0, 195, 195, 255),
        stop:1 rgba(0, 158, 158, 255));
}

效果:

 

(9)圆锥形渐变

在(cx, cy)坐标上以角度(angle)为中心显示渐变。

QLabel#label{
            background-color: qconicalgradient(cx:0.5, cy:0.5, angle:0,
            stop:0 rgba(0, 255, 0, 255), stop:0.373979 rgba(0, 255, 0, 255),
            stop:0.373991 rgba(33, 30, 255, 255), stop:0.624018 rgba(33, 30, 255, 255),
            stop:0.624043 rgba(255, 0, 0, 255), stop:1 rgba(255, 0, 0, 255));
            }

效果:


本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

连花清瘟卖断货?近一个月解热药价格暴涨33%,销额超206万元

近日,“连花清瘟生产商以岭药业正在疯狂招短期工”的消息登上热搜,以岭药业一度涨停。此外,石家庄其他感冒类药品也迎来线上线下一同销量大涨。 为此,鲸参谋特意查询了京东平台近一个月“解热镇痛”类药品的销售数据。可以看到&am…

SpringBoot自定义banner,如何定制炫酷的banner提升项目B格?

文章目录写在前面自定义banner使用banner.txt文件使用图片手写一个bannerbanner参数在 application.properties 文件中可以配置banner其他属性banner自身参数源码分析在线生成banner写在前面 Springboot启动的时候默认是有一套自己的banner的: 我们如何自定义这个…

SpringBoot+Vue项目大学生网络教学平台的设计与实现

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JDK版…

retrofit网络框架源码解析

App应用程序通过Retrofit 请求网络,实际上是使用Retrofit接口层封装请求参数,之后由OkHttp完成后续的请求操作。在服务器返回数据之后,OkHttp将原始的结果交给Retrofit,Retrofit根据用户的需求对结果进行解析。 一、retrofit框架网…

【Android】扩展BaseExpandableListAdpter实现ExpandableAdapter

今天分享如何扩展BaseExpandableListAdpter实现ExpandableAdapter,很简单的一个例子。 效果示例: 核心是重写BaseExpandableListAdpter,其中BaseExpandableListAdpter则分成了两部分:组和子列表,要注意的是&#xff0…

IDEA远程debug教程

IDEA远程debug教程 当你在本地开发的时候,你需要调试服务器上的程序时,远程调试就显得非常有用。 JAVA 支持调试功能,本身提供了一个简单的调试工具JDB,支持设置断点及线程级的调试同时,不同的JVM通过接口的协议联系…

【Netty源码系列(二)】解读EventLoopGroup

【Netty源码系列文章中源码出自4.1.84.Final版本】 文章目录1. EventLoopGroup接口类2. NioEventLoopGroup创建过程2.1 Executor实现机制2.2 EventLoop对象创建(newChild()方法)本篇文章主要看一下 EventLoopGroup的源码,了解一下它的创建过程…

二、react的组件-state-props-setState

目标 理解组件和组件的创建、以及能够根据实际场景去划分合理的组件。理解并且能够灵活的应用组件中的state、props。可以使用组件去实现各种前端交互。 知识点 组件的定义:组件能够表示一块视图的结构表现以及逻辑交互,并且可以重复利用。如何创建组件…

【ROS】机械人开发四--ROS常用概念与Launch文件

机械人开发四--ROS常用概念与Launch文件一、ROS常用概念1.1 ROS 的结构1.2 ROS 话题通信1.3 海龟仿真器 仿真 例程二、Launch文件2.1 功能2.2 文件语法2.3 参数服务器2.4 节点分组与重命名标签一、ROS常用概念 1.1 ROS 的结构 ROS 中有一些很重要的基础概念:节点&…

四、ref与DOM-findDomNode-unmountComponentAtNode

目标 理解react的框架使用中,真实dom存在的意义。 使用真实dom和使用虚拟dom的场景。 灵活掌握并能够合理使用操作真实dom的方法。 知识点 react中提供了ref这个属性来获取原生的dom节点,使用方式:在虚拟dom中添加ref属性,即可…

笔试强训(三十七)

目录一、选择题二、编程题2.1 mkdir2.1.1 题目2.1.2 题解2.2 数据库连接池2.2.1 题目2.2.2 题解一、选择题 (1)下面关于源端口地址和目的端口地址的描述中,正确的是(A) A.在TCP/UDP传输段中,源端口地址和目…

从内部失衡到外部失衡-中国视角下的宏观经济

从内部失衡到外部失衡 – 潘登同学的宏观经济学笔记 文章目录从内部失衡到外部失衡 -- 潘登同学的宏观经济学笔记国际金融复习全球失衡与储蓄过剩利用拉姆齐模型进行分析数值模拟外部失衡与国际收支危机国际支付工具的作用资产价格泡沫国际收支危机亚洲金融危机中国在亚洲金融危…

智能家居项目开发准备工作

智能家居代码机构——简单工厂模式: 什么是设计模式?百度百科解释: 软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设…

好心情精神心理平台:精神疾病怎样才算「治好」?医生和患者眼中的标准不一样!

精神疾病恢复到什么程度才算「治好」了? 很多患者朋友认为,症状消失就代表病好了,就可以停药了。 不是我吓唬你,如果你见症状好转就停药,那病情出现反复是必然结果。 实现疾病症状的消除,这只是达到了「临…

[附源码]java毕业设计驾校管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]java毕业设计基于的疫苗预约系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

详解VSCode中C++工程配置

安装MinGW-w64及环境变量配置 下载MinGW-w64 可以通过官网直接进行下载在线安装包,然后在本地进行安装即可(但是基本都会由于网络超时等各种原因终止)。 因此这里建议直接下载 MinGW-w64 库解压,然后在系统中指定环境变量即可。…

低资源场景下的命名实体识别

Overview 低资源下的命名实体识别主要分为两个方面,一种是in-domain下的N-way-K-shot类型的少样本,一种是cross-domain下现在资源丰富的sourc-domain上进行微调,之后再迁移到低资源的target-domain进一步微调。 基于prompt的方法在少样本分…

C语言学习-数组(4)

目录 思维导图: 1. 一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存…

C# async / await 的使用方法

目录 一、简介 二、异步等待返回结果 三、异步方法的返回类型 四、await foreach 五、Task.Delay 结束 一、简介 await 运算符暂停对其所属的 async 方法的求值,直到其操作数表示的异步操作完成。 异步操作完成后,await 运算符将返回操作的结果&a…