Qt实现两个窗口重叠,下层播放视频,上次透明显示方框

本文主要是介绍Qt实现两个窗口重叠,下层播放视频,上次透明显示方框,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近要实现一个功能,在播放着的视频上动态显示方框,类似于深度学习物体识别中经常见到的方框图。如下图:

动手!

1、

下层窗口播放视频,上次透明画方框

    setWindowFlags(Qt::FramelessWindowHint); 
    setAttribute(Qt::WA_TranslucentBackground);//窗口设置透明

设置完运行 ?!  Qt控件在透明窗口之下没被遮挡,但也没有视频界面

 挪开方框一看,果然是被挡住了。。

2、在网上看到一篇文章,感觉能解释清楚这个问题(正确性不敢保证)

windows下的透明是通过layered window实现的. Qt的透明窗口也是如此, 属于directui. 整个窗口只有一个winId(windows下即HWND). 
但是 opengl和directx都需要一个handle来绘制渲染. 
而Qt的窗口中, 如果某个子Widget获取了winid. 则打破"directui". 窗口中的所有widget都会拥有handle. 
因此透明窗口是无法单独把某个widget交给opengl或direcxt渲染的. 

那是不是可以通过分离这两个窗口,做成两个独立窗口来显示。(子窗口独立构造,设置parent为空)

任务栏显示两个图标,只需要在子窗口的windowFlags中加入Qt::SubWindow。

点击主窗口按钮又会将子窗口挡在后面,再加入Qt::WindowStaysOnTopHint,哎,可以了

!!!!

emmmm,好吧,还是不行,就算可以在父窗口hideevent中设置子窗口同时hide,但是!

子窗口置顶还是过于影响体验。

3、开启一系列尝试,听说可以将父窗口指针放入子窗口构造,设置raise()

---Raises this widget to the top of the parent widget's stack.

(这是跟上一条相违背。父子窗口不能有联系。)还有试过stackUnder(childWidget);重写事件event强行将子窗口置于上方都无法做到能用的程度。

4、翻阅无数网页,最终看到了某位大佬的回复


将视频上面的控件设置为Tooltip + 透明背景。另外,控件设为tooltip之后,它的坐标就不再跟随父窗口而是全局。因此需要对它的坐标做特殊的处理。
借用大佬的截图(在视频上覆盖一层透明控件,根据鼠标操作在上面画虚线框):

果然是解决了(注意:这边还是要将父窗口放入子窗口的构造函数中)

看一下文档

指示该小部件是工具窗口。 工具窗口通常是一个比通常的标题栏和装饰要小的小窗口,通常用于工具按钮的集合。 如果有父级,则工具窗口将始终保留在其顶部。 如果没有父窗口,您也可以考虑使用Qt :: WindowStaysOnTopHint。 如果窗户系统支持它,则可以用较轻的框架装饰工具窗口。 它也可以与Qt :: FramelessWindowHint结合使用。

在Mac OS X上,工具窗口对应于窗口的浮动类。 这意味着该窗口位于普通窗口之上的水平; 无法在其顶部放置普通窗口。 默认情况下,当应用程序处于非活动状态时,工具窗口将消失。 这可以由Qt :: WA_MacAlwaysShowToolWindow属性控制。

      实现原理我也无从找起,看后半段文档的意思,应该有点类似Qt::WindowStaysOnTopHint,只不过是在这父子窗口的小世界里设置了子窗口置顶。(注意关联父子窗口的hide时间,不然会出现子窗口出现在本应用的其他界面之上)。

这篇关于Qt实现两个窗口重叠,下层播放视频,上次透明显示方框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/653198

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问