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

简介: 关于 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实用技巧:实现不规则窗口的鼠标消息穿透,包括穿透到桌面和穿透到父窗口
|
计算机视觉 Windows
Qt实用技巧:实现窗口透明的五种方法
Qt实用技巧:实现窗口透明的五种方法
Qt实用技巧:实现窗口透明的五种方法
|
9月前
|
缓存 JSON 安全
Flutter 网络请求深度解析
本文深入探讨Flutter网络请求架构,对比http、dio、retrofit等库,重点详解Dio封装、拦截器、统一响应、Repository模式,并结合Riverpod状态管理与JSON序列化,构建高性能、可维护的网络层。
746 3
|
9月前
|
C++ Python
Qt Theme —— 纯 qss 的 Qt 主题
Qt Theme 是一个纯 QSS 实现的 Qt 主题库,支持 C++ 与 Python(PyQt/PySide),提供多种风格与配色,轻松美化界面。可通过 pip 安装或导出资源嵌入项目,兼容 WebAssembly 在线预览。
858 109
|
5月前
|
传感器 机器人 Linux
嵌入式开发新手入门教程(第一卷)
教程来源 https://app-a6nw7st4g741.appmiaoda.com/ 嵌入式系统是嵌入设备内部的专用计算机系统,广泛应用于智能手表、汽车电控、医疗设备乃至火星车等。其由硬件(MCU、存储器、外设)和软件(裸机/RTOS/嵌入式Linux)构成。新手可按电路与C语言→单片机开发→RTOS与ARM深入三阶段学习,推荐STM32平台入门。
|
存储 Shell iOS开发
CMake中文手册_target_link_libraries(3.26)
CMake中文手册_target_link_libraries(3.26)
2107 0
|
数据可视化
OSG嵌入QT的简明总结2
OSG嵌入QT的简明总结2
443 1
【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(一)
【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(一)
576 0
【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )(一)
|
Linux 虚拟化
Vmware 傻瓜式安装(不可不知道的Linux基础知识和技术 01)
本文介绍了VMware虚拟机的下载与安装步骤。首先,通过提供的网盘链接下载VMware安装包。接着,详细描述了安装流程,包括接受协议、选择安装路径(建议避免系统C盘)、取消更新选项等。最后,输入许可证密钥完成安装,并展示了打开虚拟机后的主界面。整个过程简单易懂,适合新手操作。