pyqt播放视频不能显示

举报
风吹稻花香 发表于 2021/06/05 00:11:26 2021/06/05
【摘要】 pyqt本来播放视频能显示,后来不能显示,最终排查,找到原因: self.setAttribute(Qt.WA_TranslucentBackground, True) 参考:http://blog.sina.com.cn/s/blog_ec6748cf0101hg2t.html Qt中使用WA_TranslucentBackground时的出现的b...


pyqt本来播放视频能显示,后来不能显示,最终排查,找到原因:

self.setAttribute(Qt.WA_TranslucentBackground, True)

参考:http://blog.sina.com.cn/s/blog_ec6748cf0101hg2t.html

Qt中使用WA_TranslucentBackground时的出现的bug解决方案

四、总结

 

当使用Qt窗口的WA_TranslucentBackground或WA_TranslucentBackground属性时,在Qt的4.6.2, 4.7.0, 5.1.0版本下,可能会造成窗口最小化后恢复显示时,不产生paint事件。该Bug在Qt5.1.1修复。

为了正常处理代码,可使用winEvent事件,接收系统发送的WM_WINDOWPOSCHANGED消息。即窗口最小化后恢复显示可以触发自己的处理代码。

 

一、问题的出现

 

Qt制作窗口阴影边框的时候,需要对背景窗口做透明处理。代码如下:

setAttribute(Qt::WA_TranslucentBackground, true);

在设置该属性时,所有背景窗口上的子窗口均被设置该属性,即所有子窗口(控件除外)也将透明。

 

在项目中,我们需要为IE插件提供一个窗口wndIE,以供IE插件在wndIE上绘制内容。但由于背景窗口wndShadow被设置为透明属性,所以wndIE也是透明的,便不能正常显示IE插件的内容。

 

我们找到的能够起作用的解决办法就是,设定wndIE的父窗口为NULL,就不会受到wndShadow透明属性的影响,以便用来显示IE插件的内容。同时通过坐标设定,让wndIE的显示位置与wndShadow同步,以及用raise()函数将wndIE窗口显示在wndShadow前面。

 

但在测试中发现,在窗口Z轴顺序切换的时候,有时会发生wndIE不能正常显示的问题。即在随意切换窗口Z顺序时,在切换回项目程序时,wndShadow会显示,而wndIE不会显示。

 

 

二、正常的解决思路

 

想到无论什么情况下,只要一个窗口被遮挡后重新完整显示,必然会有paint事件的产生。那么只要在paint事件发生时,强制让wndIE窗口显示出来就可以解决问题。

 

该思路确实产生了效果,但是在个别的情况下不起作用。

 

 

三、Qt5.1.1以下版本的Bug

 

代码跟踪发现,窗口Z轴顺序切换回wndShadowBug发生时Paint函数没有被调用,正常时Paint函数会被调用。

 

经过查找资料发现,是WA_TranslucentBackground属性的一个Bug。官网声明连接:

https://bugreports.qt-project.org/browse/QTBUG-17548

 

也就是设定了WA_TranslucentBackground属性后,在窗体最小化后还原的时候可能会没有paint事件,也就不能调用raise()wndIE窗口显示在wndShadow窗口前面。

 

为了在窗口重新显示时,正常调用raise()函数。接收wndShadowwinEvent事件。可以接收到系统发来的WM_WINDOWPOSCHANGED消息,也就是当Z轴窗体顺序切换回wndShadow时,可以产生winEvent事件,也就可以调用raise()函数,强制显示wndIE窗口。代码如下:

 

bool wndShadow::winEvent(MSG *message, long *result)

{

if(message->message  == WM_WINDOWPOSCHANGED)

{

// 处理代码

winIE->raise();

}

return false; // 返回false结束系统的默认处理

}


文章来源: blog.csdn.net,作者:网奇,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jacke121/article/details/78777981

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。