• 8340阅读
  • 6回复

怎样实现QT3控件的背景为透明 [复制链接]

上一主题 下一主题
离线wangjuns8
 
只看楼主 正序阅读 楼主  发表于: 2009-12-24
我的环境是qt3.3.8+fedora8。
在做一个程序里面用到QIconView,想让它的背景色跟主窗口的背景图片(不是纯色的)一致,但是发现当拖动滚动条之后,发现背景图片并没有刷新,刷新了闪烁有很严重,所以想把它做成背景透明的,但是我试过很久,很多种办法都没能成功,现在能想起来的有以下几种:

(1)可以给widget设成其parent一样的背景图片,并且是widget所在位置的部分图片,这样在widget不会移动的情况下是透视的效果。但是貌似QIconView不支持,我的工程里用到这个控件。
setBackgroundOrigin(ParentOrigin);
除ParentOrigin外还有:WidgetOrigin (the default), ParentOrigin, WindowOrigin or AncestorOrigin
(2)试过stylesheet,可是这好像是qt4才开始用的,我用的是qt3.3.8
setStyleSheet("background-color: rgba(255, 255, 0, 50%)");
(3)试过QWidget::setWindowQpecity(double)是设置控件透明度的。但是参考手册上好像说这个只支持Mac和windows系统:This feature is only present on Mac OS X and Windows 2000 and up。我用的是fedora8,而且在程序里试过,确实不好使
(4)试过给背景图设成一个纯透明的png图片(记得在哪里这样做过),可是底色变成白色,仍然不是透明的;
(5)在参考手册里查到enum BGMode { TransparentMode, OpaqueMode },但是不知道怎么使用
(6)在网上也查到这样的用法,但是经过测试,貌似仍然是qt4的用法,qt3不支持:
    QPalette pal = this->palette();
    pal.setBrush(QPalette::Base, Qt::transparent);  
    this->setPalette(pal);
     换成qt3支持的语法,效果跟(4)一样:
    QPalette pal = wordLabel->palette();
        const QBrush *br = new QBrush(color0, QPixmap("images/transground.png"));
       pal.setBrush(QColorGroup::Background , *br);
        wordLabel->setPalette(pal);

现在的问题是:
(1)qt3支持透明背景吗,指linux系统下?
(2)如果支持如何实现?
(3)我似乎在哪里看过在paintEvent里自己一帧一帧地画背景,但是想不起来在哪看到的了。这样是否能实现透明背景?如何实现?
(4)我尝试过把QIconViewItem的icon属性设成一个透明的png图片,这样的效果就是透明的,为什么呢?能否借鉴呢?
(5)QIconView为什么不支持setBackgroundOrigin(ParentOrigin);呢?
离线novesky

只看该作者 6楼 发表于: 2010-04-22
不行的话widget显示前先QPixmap::grabWindow()来保存parent的画面,再自己对此图片进行alpha混合产生半透明图片,最后setBackgroundPixmap
我就想到了这个
离线xinqingfly

只看该作者 5楼 发表于: 2010-04-08
使用透明的png,不然显示的就会带上图片的背景,没看到qt3能自己处理图片的透明度
菜鸟也是鸟
离线yangfanxing
只看该作者 4楼 发表于: 2010-04-08
摆渡之~
PHPWind好恶心。。。不想看这种界面。。。
离线spscc1008

只看该作者 3楼 发表于: 2010-04-08
这个透明窗体qt3支持不 没人回答?
离线angry_angel
只看该作者 2楼 发表于: 2010-01-05
我也是使用qt3.3.8碰到这个问题,希望高手来接到,我的问题是对话框后面的主窗体显示内容不断变化,要让对话框透明显示后面主窗体内容!
离线wangjuns8
只看该作者 1楼 发表于: 2009-12-24
怎么没人回答呢?急于知道,先谢谢了!
快速回复
限100 字节
 
上一个 下一个