fku_m
fku_m
采纳率100%
2019-10-09 14:52

QT开发中,继承于QopenGLWidget类的视频窗口,为什么会导致QDockWidget类的父窗口白屏无法绘制?

已采纳

求大佬指点迷津!!折磨我好久了,没办法解决了,头绪都没有

图片说明图片说明

如图所示,在QDockWidget父类窗口停靠时,功能一切正常。4个窗口的类型
为QGLYuv420Widget,继承方式如下:
class QGLYuv420Widget : public QOpenGLWidget, protected QOpenGLFunctions。
问题描述:
1、当QDockWidget父类窗口漂浮起来,就白屏了。
2、隐藏4个窗口,再漂浮,不会白屏
3、在main函数中,QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL),改为QCoreApplication::setAttribute(Qt::AA_UseOpenGLES),漂浮状态没有问题,不过视频窗口无法工作。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • recovery010 get_refuse 7月前

    尝试设置QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);

    点赞 评论 复制链接分享
  • feiyangqingyun feiyangqingyun 1月前

    142. 在停靠窗体QDockWidget和QOpenGLWidget同时使用的时候,从嵌入状态切换到浮动状态或者浮动状态切换到嵌入状态,QOpenGLWidget的上下文会被打乱导致白屏失效,需要在main函数中开头位置设置下共享OpenGL上下文。
    ```cpp
    int main(int argc, char *argv[])
    {
        //需要设置共享上下文不然停靠窗体从正常到浮动后QOpenGLWidget窗体会失效
    #if (QT_VERSION > QT_VERSION_CHECK(5,4,0))
        QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
    #endif
        QApplication a(argc, argv);
        ...
    }
    ```

    点赞 评论 复制链接分享

相关推荐