QtWidget: 利用Qt4.5新特性实现酷炫透明窗体

Qt4.2引入了QWidget::setWindowOpacity函数, 可以为窗体设置透明度, 从0.0到1.0之间, 值越小越透明。 经过设置的窗体可以整体呈现透明的效果。 但这种设置比较粗糙, 只能设一个整体的效果, 大概只有比如像拖动的时候能用一下, 大多数时候都不太实用。 在Qt4.5里引入了新的窗体透明特性, 是个Widget的Attribute, 叫做Qt::WA_TranslucentBackground。 这个属性可以为每个QWidget单独设置, 并且透明程度可以用绘制的颜色或图片的Alpha Channel值来控制。

笔者写了一个例子演示其奇妙的效果。 先看一个截图:
translucent

这个是笔者例子运行出来的效果, 背景是www.cuteqt.com雷人的主页。  下面简单介绍一下代码的实现。

TranslucentBackground控制窗体透明属性
例子主界面用QWidget, 其上放置四个控件, 上面两个是自定义的QWidget子类, 用在paintEvent中绘制了一幅透明底色的图片, 上书“CuteQt”几个大字; 下面两个是标准的QLabel控件, 但显示出两种不同的效果。

透明的控件的TranslucentBackground属性为true (继承了parent的属性), 而非透明的控件则在代码中强制将TranslucentBackground设为了false, 这样就造就了有意思的结果。 代码片段如下:
label = new QLabel(”www.cuteqt.com”);
label->setAttribute(Qt::WA_TranslucentBackground, false);
label->setAutoFillBackground(true);

Alpha Channel控制透明度
将这个例子稍稍改动, 修改一下窗体背景色的Alpha值, 使之展现不同的透明度。 实现的方法是设置窗体的palette属性, 为Background这个ColorRole的颜色设置了alpha值, 代码片段如下:
QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(255,0,0,200));
setPalette(pal);

下图所示为alpha值100和200的不同显示效果。

translucent1

translucent2

怎么样, 这个例子挺有意思吧? 赶快下载完整的代码学习一下吧~ 有任何不明白blog或bbs留言~

translucent.tar.gz

posted on 2009-06-12 17:27 逛奔的蜗牛 阅读(1781) 评论 (6)   编辑  收藏 引用 所属分类: Qt自定义 Widget


评论

#  re: QtWidget: 利用Qt4.5新特性实现酷炫透明窗体[未登录] 2009-06-25 16:10 haha
哦?准备试试~   回复   更多评论
  

#  re: QtWidget: 利用Qt4.5新特性实现酷炫透明窗体 2009-07-02 13:47 dotboy
你好,我下了你的代码在windows平台下试用了下,结果只是主窗体的背景变成黑色了,并没有看到桌面...   回复   更多评论
  

#  re: QtWidget: 利用Qt4.5新特性实现酷炫透明窗体 2009-07-03 08:32 dotboy
搞定了,在windows下,要把标题栏给去了才能显示透明效果...   回复   更多评论
  

#  re: QtWidget: 利用Qt4.5新特性实现酷炫透明窗体 2009-07-17 23:01 Holy
gz的文件是什么格式?用winrar解压不了啊!
麻烦楼主最好用WinRar打包一下吧   回复   更多评论
  

#  re: QtWidget: 利用Qt4.5新特性实现酷炫透明窗体[未登录] 2009-08-12 17:09 天天
请问wince下能否实现透明的效果   回复   更多评论
  

#  re: QtWidget: 利用Qt4.5新特性实现酷炫透明窗体[未登录] 2010-02-23 15:26 路人甲
关键一句话“透明的控件的TranslucentBackground属性为true (继承了parent的属性), 而非透明的控件则在代码中强制将TranslucentBackground设为了false,”   回复   更多评论
from: http://www.cppblog.com/biao/archive/2009/06/12/87508.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值