Qt透明窗体问题

demystify 2015-06-05 05:57:35
网上找到了很多实现Qt窗体透明的方法,但是测试发现仅SetAttribute( Qt::WA_TranslucentBackground );有效。其他方法及运行效果如下:
方法一:设置窗体背景色
在窗体构造器里添加:
 setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint );

QPalette pal = palette();
pal.setColor(QPalette::Background, QColor(0×00,0xff,0×00,0×00));
setPalette(pal);


结果:窗体显示为黑色


方法二:在Paint事件中使用Clear模式绘图
void Transluent_Test1::paintEvent(QPaintEvent* e)
{
QPainter p( this );
p.setCompositionMode( QPainter::CompositionMode_Clear );

p.fillRect( 10, 10, 300, 300, Qt::SolidPattern );
}

结果:绘制的部分是黑色


方法三:全透明背景贴图
[code=cQPalette palette;
QPixmap pixmap(":/Transluent_Test1/Resources/background.png");
palette.setBrush(QPalette::Background, QBrush( pixmap ));
setPalette(palette);
this->setAutoFillBackground(true);][/code]
结果:


我使用的编程环境是:qt5.4.1_64_opengl + vs2013 + win7

请问,为什么这些方法无效?是不是与系统配置有关?
...全文
370 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
顶层窗口才会出现这种情况吧
demystify 2015-06-24
  • 打赏
  • 举报
回复
引用 5 楼 liguanpei 的回复:
setWindowFlags(Qt::FramelessWindowHint); 用这个有效呀,我的环境跟你一模一样,也是qt_opengl vs2013 win7,设置成功了
引用 5 楼 liguanpei 的回复:
setWindowFlags(Qt::FramelessWindowHint); 用这个有效呀,我的环境跟你一模一样,也是qt_opengl vs2013 win7,设置成功了
我这边刚才测试了一下,还是无效
小观观 2015-06-24
  • 打赏
  • 举报
回复
setWindowFlags(Qt::FramelessWindowHint); 用这个有效呀,我的环境跟你一模一样,也是qt_opengl vs2013 win7,设置成功了
小观观 2015-06-24
  • 打赏
  • 举报
回复
setWindowFlags(Qt::FramelessWindowHint);
小观观 2015-06-24
  • 打赏
  • 举报
回复
setWindowFlags(Qt::FramelessWindowHint);
流星雨LH 2015-06-24
  • 打赏
  • 举报
回复
同求问题解决方案,我也遇到窗口透明的问题。目前用 setWindowFlags(Qt::FramelessWindowHint); setAttribute(Qt::WA_TranslucentBackground, true);靠谱,但是存在失焦和隐藏控件显示等一堆麻烦,不知道如何解决。
未狂 2015-06-11
  • 打赏
  • 举报
回复
用样式表好了……

16,816

社区成员

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

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