Qt4.2引入?span style="color: rgb(0, 0, 128); ">QWidget::setWindowOpacity函数Q?可以为窗体设|透明度, ?.0?.0之间Q?D越透明?l过讄的窗体可以整体呈现透明的效果?但这U设|比较粗p, 只能设一个整体的效果Q?大概只有比如像拖动的时候能用一下, 大多数时候都不太实用?在Qt4.5里引入了新的H体透明Ҏ, 是个Widget的AttributeQ?叫做Qt::WA_TranslucentBackground?q个属性可以ؓ每个QWidget单独讄Q?q且透明E度可以用绘制的颜色或图片的Alpha Channel值来控制?/p>
q个是笔者例子运行出来的效果Q?背景是www.cuteqt.com雷h的主c?nbsp; 下面单介l一下代码的实现?/p>
TranslucentBackground控制H体透明属?/strong> 透明的控件的TranslucentBackground属性ؓtrue Q承了parent的属性)Q?而非透明的控件则在代码中强制TranslucentBackground设ؓ了falseQ?q样造就了有意思的l果?代码片段如下Q?br>label = new QLabel(”www.cuteqt.com”); Alpha Channel控制透明?/strong> 下图所CZؓalpha?00?00的不同显C效果?/p> 怎么P q个例子挺有意思吧Q?赶快下蝲完整的代码学习一下吧?有Q何不明白blog或bbs留言?/p>
例子ȝ面用QWidgetQ?其上攄四个控gQ?上面两个是自定义的QWidget子类Q?用在paintEvent中绘制了一q透明底色的图片, 上书“CuteQt”几个大字Q?下面两个是标准的QLabel控gQ?但显C出两种不同的效果?/p>
label->setAttribute(Qt::WA_TranslucentBackground, false);
label->setAutoFillBackground(true);
这个例子稍E改动, 修改一下窗体背景色的Alpha| 使之展现不同的透明度?实现的方法是讄H体的palette属性, 为Backgroundq个ColorRole的颜色设|了alpha| 代码片段如下Q?br>QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(255,0,0,200));
setPalette(pal);