fku_m
2019-10-09 14:52
采纳率: 100%
浏览 1.3k

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条回答 默认 最新

  • get_refuse 2020-10-19 11:13
    已采纳

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

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • feiyangqingyun 2021-04-17 10:19

    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);
        ...
    }
    ```

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题