• 7693阅读
  • 28回复

(Windows+qt4.4) 中如何实现只让客户区域透明化? [复制链接]

上一主题 下一主题
离线donixli1314
 

只看楼主 倒序阅读 楼主  发表于: 2009-08-06
(Windows+qt4.4)能实现只让客户区半透明或透明吗?
[ 此帖被donixli1314在2009-08-07 17:29重新编辑 ]
离线donixli1314

只看该作者 1楼 发表于: 2009-08-06
有没有谁知道?
离线shiroki

只看该作者 2楼 发表于: 2009-08-06
看来我们辛辛苦苦写blog, 看的人还是太少啊
http://www.cuteqt.com/blog/?p=385
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线donixli1314

只看该作者 3楼 发表于: 2009-08-06
版主,你的blog我已经看过了,而且还把demo下了下来
但是运行的效果客户区并不是透明的,只是黑黑的
估计版主使用的qt版本是4.5吧
所以我在提问的时候特别指出是4.4版本
离线donixli1314

只看该作者 4楼 发表于: 2009-08-06
4.4版本中没有Qt::WA_TranslucentBackground属性
离线donixli1314

只看该作者 5楼 发表于: 2009-08-06
网上还有另一中方法:
QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(0x00,0xff,0x00,0x00));
setPalette(pal);
但我的程序是在Windows下运行的,使用这中方法运行出来的效果还是黑黑的
离线napier

只看该作者 6楼 发表于: 2009-08-06
在 Windows 下确实就是黑色的,并不是 Qt 版本的问题。
离线donixli1314

只看该作者 7楼 发表于: 2009-08-07
啊?
那也就是说q4.4版本的在Windows下不能实现客户区透明的效果了?
离线napier

只看该作者 8楼 发表于: 2009-08-07
我做过一个简单的不规则窗口。使用 Qt::FramelessWindowHint 以后,窗口才会在需要透明的地方变得透明,同时标题栏和边框也没有了。如果不用这个参数,背景就是黑的,没有出现版主博客里面的那种效果。

不知道这样可不可以:用老办法,mask 把客户区掩掉,然后再在上面显示文字等等,并且让相应窗口部件的背景透明。我没有试过,不知道行不行。

一定管用的办法,就是使用 Qt::FramelessWindowHint,然后自己实现一个标题栏和边框。
离线donixli1314

只看该作者 9楼 发表于: 2009-08-07
引用第8楼napier于2009-08-07 13:55发表的  :
我做过一个简单的不规则窗口。使用 Qt::FramelessWindowHint 以后,窗口才会在需要透明的地方变得透明,同时标题栏和边框也没有了。如果不用这个参数,背景就是黑的,没有出现版主博客里面的那种效果。
不知道这样可不可以:用老办法,mask 把客户区掩掉,然后再在上面显示文字等等,并且让相应窗口部件的背景透明。我没有试过,不知道行不行。
一定管用的办法,就是使用 Qt::FramelessWindowHint,然后自己实现一个标题栏和边框。


QPalette palete = palette ();
  QPixmap backImage (QString::fromUtf8 ("resource/b1.png"));
  QBitmap maskImage (QString::fromUtf8 ("resource/b2.png"));
  palete.setColor (QPalette::Background, QColor (0x00, 0xff, 0x00, 0x00));
  palete.setBrush (QPalette::Window, QBrush (backImage));
  setPalette (palete);
  setMask (maskImage);
  setWindowFlags (Qt::FramelessWindowHint);

我的怎么就不透明呢,总是黑黑的
离线napier

只看该作者 10楼 发表于: 2009-08-07
汗,我说的透明不是让 palette 背景透明,而是以后放在透明区域的其他窗口部件,比如 Label,背景应该是透明的(如果可以的话),否则会变成一个方块。


    QPalette pt = palette();
    QPixmap pixmapImg("photo.png");
    QBitmap bitmapMask("mask.png");
    pt.setBrush(QPalette::Window, QBrush(pixmapImg));
    setPalette(pt);
    setMask(bitmapMask);
    setWindowFlags(Qt::FramelessWindowHint);
[ 此帖被napier在2009-08-07 17:58重新编辑 ]
离线XChinux

只看该作者 11楼 发表于: 2009-08-07
楼上的签名比较特别,呵呵
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线donixli1314

只看该作者 12楼 发表于: 2009-08-07
但我要的效果是主窗口的客户区透明或半透明(Windows平台,qt4.4)
效果如 http://www.cuteqt.com/blog/?p=385 所示的
离线donixli1314

只看该作者 13楼 发表于: 2009-08-07
引用第10楼napier于2009-08-07 16:57发表的  :
汗,我说的透明不是让 palette 背景透明,而是以后放在透明区域的其他窗口部件,比如 Label,背景应该是透明的(如果可以的话),否则会变成一个方块。
    QPalette pt = palette();
    QPixmap pixmapImg("photo.png");
.......



其他控件的背景透明可以通过setStyleSheet(QString::fromUtf8 ("background-color:transparent;"));实现
离线napier

只看该作者 14楼 发表于: 2009-08-07
就是说嘛,你把需要透明的地方处理好以后,自己实现一个标题栏和边框,那样就行了。
离线donixli1314

只看该作者 15楼 发表于: 2009-08-07
大哥呀
我就是不知道如何把客户区做成透明的才来求高人指点
离线napier

只看该作者 16楼 发表于: 2009-08-07
用上面的代码,你不是能够实现不规则窗口了么?能实现不规则窗口,不就能把窗口中间变成空的么?
离线donixli1314

只看该作者 17楼 发表于: 2009-08-07
我明白你的意思,
但实现出来中间是黑的
离线donixli1314

只看该作者 18楼 发表于: 2009-08-07
我已经把图片的中间做成透明的了
但实现出来就中间就是黑的
离线napier

只看该作者 19楼 发表于: 2009-08-07
Widget::Widget(QWidget *parent)
    : QWidget(parent, Qt::FramelessWindowHint | Qt::WindowSystemMenuHint), ui(new Ui::Widget)
{
    ui->setupUi(this);

    QPalette pt = palette();
    QPixmap pixmapImg(":/images/top.png");
    QBitmap bitmapMask(":/images/mask.png");
    pt.setBrush(QPalette::Window, QBrush(pixmapImg));
    setPalette(pt);
    setMask(bitmapMask);
}

我这样做,中间就是透明的啊。

你不会是把 mask 搞错了吧?
离线donixli1314

只看该作者 20楼 发表于: 2009-08-07
你的图片中间是透明的吗?
离线napier

只看该作者 21楼 发表于: 2009-08-07
效果:

蓝色的是窗口。中间透明。
离线napier

只看该作者 22楼 发表于: 2009-08-07
Mask 用的两张图片:


  
离线donixli1314

只看该作者 23楼 发表于: 2009-08-07
老兄,你的平台是Windows是吗?
我的平台是Windows
离线napier

只看该作者 24楼 发表于: 2009-08-07
汗,我不是早就提过 Windows 了么。要不是瘟到死就用不着 FramelessWindowHint 了。
离线donixli1314

只看该作者 25楼 发表于: 2009-08-07
有点效果了
你的黑框那张图的中间是透明的还是灰色的?
离线donixli1314

只看该作者 26楼 发表于: 2009-08-07

我都纳闷了
离线donixli1314

只看该作者 27楼 发表于: 2009-08-07
老兄
谢了哈。
回家再试试看是那的问题
离线nmiirq

只看该作者 28楼 发表于: 2009-08-08
楼主结帖后能否总结一下,看来windows和linux下实现此效果还是有很多的区别的!
快速回复
限100 字节
 
上一个 下一个