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

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: 关于 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


相关文章
|
计算机视觉
Qt实用技巧:实现不规则窗口的鼠标消息穿透,包括穿透到桌面和穿透到父窗口
Qt实用技巧:实现不规则窗口的鼠标消息穿透,包括穿透到桌面和穿透到父窗口
Qt实用技巧:实现不规则窗口的鼠标消息穿透,包括穿透到桌面和穿透到父窗口
|
算法 前端开发 C++
【Qt UI相关】Qt设置窗体或控件的背景色透明
【Qt UI相关】Qt设置窗体或控件的背景色透明
2111 0
|
数据可视化 API vr&ar
探索Qt 3D之旅:从基础到实战,打造引人入胜的三维界面与应用
探索Qt 3D之旅:从基础到实战,打造引人入胜的三维界面与应用
2572 3
|
前端开发 JavaScript C++
打造卓越 QML 层级设计:从入门到精通(一)
打造卓越 QML 层级设计:从入门到精通
3615 1
|
计算机视觉 Windows
Qt实用技巧:实现窗口透明的五种方法
Qt实用技巧:实现窗口透明的五种方法
Qt实用技巧:实现窗口透明的五种方法
我的Qt作品(3)基于QTabWidget和AdvancedDocking实现的Ribbon风格主界面【开源】
我的Qt作品(3)基于QTabWidget和AdvancedDocking实现的Ribbon风格主界面【开源】
2296 0
我的Qt作品(3)基于QTabWidget和AdvancedDocking实现的Ribbon风格主界面【开源】
|
安全 Shell Linux
内网渗透测试基础——Windows PowerShell篇
内网渗透测试基础——Windows PowerShell篇
522 0
|
开发工具 git
Vcpkg安装指定版本包或自定义安装包
Vcpkg安装指定版本包或自定义安装包
2520 0
|
编解码 编译器 C语言
【FFmpeg】ffmpeg 命令查询一 ( 版本 | 编译配置 | 复用格式 | 编解码器 )(一)
【FFmpeg】ffmpeg 命令查询一 ( 版本 | 编译配置 | 复用格式 | 编解码器 )(一)
2842 0
【FFmpeg】ffmpeg 命令查询一 ( 版本 | 编译配置 | 复用格式 | 编解码器 )(一)
|
Linux 图形学
深入理解Qt定时器:QTimer的魅力与挑战(一)
深入理解Qt定时器:QTimer的魅力与挑战
8135 0