关于 QGLWidget和QOpengGLWidget透明相关问题 的解决方法

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 关于 QGLWidget和QOpengGLWidget透明相关问题 的解决方法

若该文为原创文章,未经允许不得转载

原博主博客地址:https://blog.csdn.net/qq21497936

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/94635225

目录

需求

相关博客

测试不同方案可达到的三种效果

解决方法

补充(2019年7月18日):共父类的子控件(与QOpenGLWidget兄弟控件)无法透明

尝试一

尝试二(无父子兄弟关系)

补充OPENGL渲染窗口上可以半透明当前尝试可行的唯一方法

补充(2019年7月22日):Qt场景视图兼任OSG叠加窗口的方式是不能透明的(QGraphicsView的背景是OSG)

补充(2019年08月06日)


 

   关于 QGLWidget和QOpengGLWidget透明相关问题 的解决方法

 

需求

       白板需要打开PPT,打开PPT后在上面仍然存在白板,很自然想到窗口透明,白板视图场景采用的是OpengGL窗口(提高效率,效果也比QWidget窗口好)。

 

相关博客

Qt开发笔记:QGLWidget、QOpenGLWidget详解及区别

 

测试不同方案可达到的三种效果

  • QOpengGLWidget和QGLWidget测试是黑的:设置背景色不透明(后续:都显示,是QGLWidget渲染导致都无法透明)
  • QOpengGLWidget测试完全透明:鼠标都穿透:设置背景色透明,重写painterEvent,设置stylesheet

       

  • QGLWidget测试是绘图不断叠加:鼠标不穿透,但是刷新A1后,刷新叠A2,再刷新叠A3,不断叠加

 

解决方法

       改回QWidget,要解决该问题需要查看qt源码QOpenGL和QGraphicsView的实现,暂时没有实现。

 

补充(2019年7月18日):共父类的子控件(与QOpenGLWidget兄弟控件)无法透明

尝试一:

       与之前的视频播放器上面需要半透明控件一样,估计是传句柄绘制

       

       

尝试二(无父子兄弟关系):

     

补充OPENGL渲染窗口上可以半透明当前尝试可行的唯一方法

补充(2019年7月22日):Qt场景视图兼任OSG叠加窗口的方式是不能透明的(QGraphicsView的背景是OSG)

 

 

下面的可以(osg作为view的北京,场景中addwidget)

 

补充(2019年08月06日)

       发现Qt的OpenGl可以半透明,而OSG无法半透明,于是深入进行对比测试,测试验证过程如下:

  1. 使用QGLWidget渲染,上层qt控件无法透明(设置透明一定有黑色底框,与设置透明属性没有关系)
  2. 使用QOpenGLWidget渲染,上层qt控件无法透明(后解析:是工程同时渲染QGLWidget和QOpenGLWidget导致)
  3. 不设置父类,通过布局将两者加入QWidget布局中,无法透明(后解析:两种都添加)
  4. 不设布局,直接设置父类可透明(后解析:一种一种添加,单独渲染QOpenGLWidget能透明)
  5. 在osg工程中,单独使用QGLWidget空窗口(上浮不能透明),单独使用QOpenGLWidget空窗口(上浮能透明)
  6. 在osg工程中,不舍布局只设置父类,无法透明(后解析,一半使用QGLWidget,一半使用QOpenGLWIdget)
  7. osg工程与之前4的情况,最大区别在于是否有ui设计文件(后解析:不是该问题)
  8. 将能透明的前4种的带ui的累放入osg工程中,透明(后解析:是使用QOGLWidget导致的上浮控件不能透明)
  9. 进一步确认,是因为渲染的时候如果渲染加入了QGLWidget则整个窗口在opengl上的上浮控件渲染都不会透明
  10. 再次在osg中确认,是QGLWidget导致的无法上浮半透明控件
  11. 进一步确认,带父类与不带父类与透明无关,是QGLWidget若在渲染窗口中,则其他opengl渲染窗口上浮控件都无法透明。

      至此解决,强力推荐使用QOpenGLWidget而不要使用QGLWIdget。

原博主博客地址:https://blog.csdn.net/qq21497936

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/94635225


相关文章
完成切换网络+修改网络连接图标提示的代码框架
完成切换网络+修改网络连接图标提示的代码框架
|
4月前
|
物联网 开发者 智能硬件
无线模块透明传输原理及过程解析
透明传输是无线模块中一种保持数据原样的传输技术,它使数据在发送和接收时不经过任何处理,确保内容一致。该过程包括配置模块为透明模式、数据通过串口发送、模块封装帧格式并通过无线信道传输,以及接收端解封装并传递给应用。这种传输方式简化开发、保证数据完整性、提高通信效率且灵活性高,常用于物联网和智能家居等领域的无线通信。
|
5月前
|
Web App开发 移动开发 监控
mPaaS问题之开始配置是灰色的如何解决
mPaaS配置是指在mPaaS平台上对移动应用进行的各项设置,以支持应用的定制化和优化运行;本合集将提供mPaaS配置的操作指南和最佳实践,助力开发者高效管理和调整移动应用的设置。
|
5月前
|
测试技术 项目管理
如何解决信息不透明问题
如何解决信息不透明问题
176 0
LabVIEW设置应用程序显示标签透明
本篇博文将介绍一种简单方法,还是以我们分享的LabVIEW实现科学计算器小项目为例,将最下面的提示按钮背景设置为透明效果
|
SQL 存储 Oracle
Oracle数据库-设置10053事件的三种办法
Oracle数据库-设置10053事件的三种办法
237 0
关于QtForMac开发 ui界面设置最小宽度和高度无效 的解决方法
关于QtForMac开发 ui界面设置最小宽度和高度无效 的解决方法
|
Android开发
安卓图片自适应的解决办法
今天测试时,发现背景图片显示有问题。什么问题?没有自动缩放。
139 0