开发者社区> 潘志闻> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Qt之窗体透明

简介: 简述 关于窗体透明,经常遇到,下面我们针对常用的透明效果进行讲解: 全透明(主窗体、子窗体均透明) 主窗体透明(子窗体不透明) 子窗体透明(主窗体不透明) 简述 正常状态 全透明 效果 源码 主窗体透明 效果 源码 子窗体透明 更多参考 正常状态 正常状态下,效果如下: 全透明 这里,我们可以透过整个窗体观看到桌面的背景
+关注继续查看

简述

关于窗体透明,经常遇到,下面我们针对常用的透明效果进行讲解:

  1. 全透明(主窗体、子窗体均透明)
  2. 主窗体透明(子窗体不透明)
  3. 子窗体透明(主窗体不透明)

正常状态

正常状态下,效果如下:

这里写图片描述

全透明

这里,我们可以透过整个窗体观看到桌面的背景。

效果

这里写图片描述

源码

设置窗口的透明度,如下:

setWindowOpacity(0.5);

透明度取值范围:0.0(全透明) - 1.0(不透明),默认值为1.0。

主窗体透明

这里,我们可以透过窗体的一部分观看到桌面的背景。

效果

这里写图片描述

源码

使用paintEvent进行背景绘制

主窗体采用背景色:

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // QColor最后一个参数80代表alpha通道,一般用作透明度
    painter.fillRect(rect(), QColor(50, 50, 50, 80));
}

主窗体采用背景图片:

首先,设置背景透明:

setAttribute(Qt::WA_TranslucentBackground, true);

然后,绘制窗体背景:

void QZXingWidget::paintEvent(QPaintEvent *event)
{
    QPixmap covertPixmap(":/Images/background");
    QPixmap pixmap(covertPixmap.width(), covertPixmap.height());
    pixmap.fill(Qt::transparent); 
    QPainter painter(&pixmap);
    QPoint start_point(0, 0);
    QPoint end_point(0, pixmap.height());

    //QLinearGradient进行渐变色设置
    QLinearGradient gradient(start_point, end_point);
    gradient.setColorAt(0, QColor(255, 255, 255, 100));
    gradient.setColorAt(0.5, QColor(255, 255, 255, 150));
    gradient.setColorAt(1, QColor(255, 255, 255, 255));
    painter.fillRect(rect(), QBrush(gradient));
    painter.setCompositionMode(QPainter::CompositionMode_SourceIn); 
    painter.drawPixmap(0, 0, covertPixmap);
    painter.end();

    QPainter painter2(this);
    painter2.drawPixmap(0, 0, pixmap);
}

子窗体透明

这部分在博客中已经分享过了,这里就不再过多阐述,请参考:Qt之透明提示框

更多参考

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Qt实用技巧:使用非透明窗体鼠标穿透到桌面的设置方法
Qt实用技巧:使用非透明窗体鼠标穿透到桌面的设置方法
214 0
css3的新属性 新增的颜色--- 透明度---两种渐变---定义多张背景图--background-size
css3的新属性 新增的颜色--- 透明度---两种渐变---定义多张背景图--background-size
41 0
CSS实现透明边框
border: 8px solid rgba(255,255,255,0.2);
844 0
C# 透明窗体制作方法比较-性能较差方法
制作透明窗体办法有好几种,各有优缺点. 我们先来看看C#本身提供的办法 1:通过设置窗体的 TransparencyKey实现     例:窗体中的白色会变成透明 this.BackColor =Color.White; this.TransparencyKey = Color.White; 2:通过设置窗体的 Opacity 实现 例:窗体的透明度为50% this.Opacity = 0.5; 为了更好说明问题,我们先看一个实例。
993 0
ORACLE11G透明网关连接sybase数据库
前言:之前已经整理过两个文档是关于oracle透明网关连接mysql数据库和sqlserver数据库的,本来以为不会再通过透明网关连接其他的数据库了,但是居然又碰到了,就是oracle通过透明网关连接sybase数据库,再次不厌其烦的整理成了文档;   注:博客里面整理了透明网关的搭建、连接sqlserver数据库、mysql数据库的方法,由于时间紧张请各位在博客里面搜索下; 正文:配置透明网关连接sybase数据库的方法其实和连接sqlserver的方法,几乎是一模一样的。
1198 0
透明位图的显示
包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似 TransparentBlt的功能,实现过程也有两种形式,一种是事先做一张掩码位图,另一种是动态生成掩码位图。
787 0
关于窗体透明的做法
关于窗体透明的做法 1.在Delphi中,设置窗体的AlphaBlend := true;AlphaBlendValue := 0-255; AlphaBlendValue越小窗体的透明度就越高。
657 0
asp.net 子窗体刷新父窗体
前提:子窗体是由父窗体open出来的 方法:在相关事件里写上window.opener.location=window.opener.location;就搞定了
684 0
+关注
潘志闻
互联网挖掘者
290
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载