逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::

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 逛奔的蜗牛 阅读(11162) 评论(9)  编辑 收藏 引用 所属分类: 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,”  回复  更多评论
  

# re: QtWidget: 利用Qt4.5新特性实现酷炫透明窗体 2011-06-09 11:11 ykh
如何去掉标题呢?指的是什么标题@dotboy
  回复  更多评论
  

# re: QtWidget: 利用Qt4.5新特性实现酷炫透明窗体 2014-06-23 11:33 tomy
代码下载不了呢,能不能发一份到guesttomy@sina.com? 非常感谢  回复  更多评论
  

# re: QtWidget: 利用Qt4.5新特性实现酷炫透明窗体 2014-11-05 18:17 trovaip
TrovaIP è il sito che permette di scoprire il proprio indirizzo IP.
http://www.trovaip.it/host/friv-planet.com
http://www.trovaip.it/host/friv-top.com
http://www.trovaip.it/host/juegos-friv-10.com
http://www.trovaip.it/host/giochi-delle-winx.com
http://www.trovaip.it/host/denygiochi.it  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理