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

16 篇文章 50 订阅

若该文为原创文章,未经允许不得转载
原博主博客地址: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

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙红胖子Qt(长沙创微智科)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值