Qt中设置窗口背景透明的问题

laigus 2014-08-17 03:40:20
我用Qt5, 新建工程自动生成的dialog窗口。

在dialog.cpp中加了 setWindowFlags(Qt::FramelessWindowHint);
再在ui界面中设置qss,加入带透明部分的背景图片,就是用的background-image
这样的话背景透明部分就是白的。
如果加上background-color:transparent; 背景透明部分就是黑的了。但是在界面的预览里看着还是好的。




然后我上网查了一下加了两句
setWindowOpacity(1);
setAttribute(Qt::WA_TranslucentBackground);
这样的话就背景就完全透明,什么图片都没有了。

我又查了很多其他方法试了都有问题。这个问题纠结两天了。该怎么办。

...全文
3938 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Inhibitory 2014-08-18
  • 打赏
  • 举报
回复
QSS对顶级窗口无效
laigus 2014-08-17
  • 打赏
  • 举报
回复
这样只能是透明的完全透明,不透明的就是不透明。没有透明度的问题。 不过在研究你这例子的时候给我灵感了。 背景会全透明但组件不会全透明,所以就用一个label加上图片当背景就能实现了。 谢谢啦。号高兴!
漫舞云中影 2014-08-17
  • 打赏
  • 举报
回复
可以在paintEvent和resizeEvent里使用setMask()函数。这样就可以实现异形窗口了。


QBitmap bitMap(width( ), height( ));
//创建一个跟窗口一样的bitMap
QPainter bitMapPainter(&bitMap);
bitMapPainter.setPen(Qt::GlobalColor::color0);
//先填充
bitMapPainter.drawRect(0, 0, width( ), height( ));
//下面换成你自己的图片。
QPixmap imageTest(R"(C:\Users\Master\desktop\未标题-1.png)");
//然后bitMap就有了你的图片。
bitMapPainter.drawPixmap(0, 0, imageTest.width( ), imageTest.height( ), imageTest);
setMask(bitMap);

//接着再用painter画一遍图片,然后才会有颜色。
//注意坐标的计算
//接下来交给你了。

随便用ps画了一张……

qq_19665809 2014-08-17
  • 打赏
  • 举报
回复
呵呵...........................

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧