• 24780阅读
  • 12回复

Qt5 的QWindow和QWidget组件嵌套方法 [复制链接]

上一主题 下一主题
离线yangkun52131
 

只看楼主 倒序阅读 楼主  发表于: 2013-12-06
  以前使用QGLwidget做opengl开发,最近转为Qt5由于要使用多线程渲染。以前使用QGLwidget做多线程时候解决上下文共享问题没有尝试过。现在要使用此功能所以查找了很多例子来做多线程渲染。目前修改好一个例子是把Qt5里面的Qwindow继承的窗口进行和Qwidget组件的窗口进行组合。下面给出改好的例子。
      本例有一个问题就是一直报:QWidget::paintEngine: Should no longer be called警告。估计是QWidget子类不能正常绘画内容吧!

       * 还望有大师指点用这种方法进行多线程渲染,能解决上下文共享。
         openglwindow.7z (4 K) 下载次数:156
离线彩阳

只看该作者 1楼 发表于: 2013-12-07
做多线程渲染有什么优点?
上海Qt开发联盟,热忱地欢迎你的加入!
离线yangkun52131

只看该作者 2楼 发表于: 2013-12-11
回 1楼(彩阳) 的帖子
目前我做的系统软件主要是,分很多过程,第一个过程是一个三维场景进行编辑,然后根据设定的镜头位置,将场景内容渲染到纹理中,然后再将纹理进行各种颜色的处理。此过程完成后将纹理进行贴图。然后变形,在将纹理和其他纹理进行混合或其他处理。然后再将其渲染成纹理然后再贴到视口上。
     由于过程很多,并且还要实时视频图像或是其他图像解码。所以中间处理的数据过程太多。所以我要使用多opengl上下文共享。然后完成这个过程。
离线彩阳

只看该作者 3楼 发表于: 2013-12-13
明白,RTT+纹理投影+视频帧抓取,挺好的,请问这是一个什么系统软件,对性能有什么要求,对画面有什么要求?
上海Qt开发联盟,热忱地欢迎你的加入!
离线yangkun52131

只看该作者 4楼 发表于: 2013-12-17
回 3楼(彩阳) 的帖子
主要是媒体系统。使用对帧率要求:普通30帧以上,还有立体显示。所以对画质要求较高。
离线彩阳

只看该作者 5楼 发表于: 2013-12-22
我看了一下,多个OpenGL上下文以及共享OpenGL上下文的例子hellowindow,使用了QMutex会防止死锁,但由此产生的性能也会衰减。
上海Qt开发联盟,热忱地欢迎你的加入!
离线yangkun52131

只看该作者 6楼 发表于: 2013-12-24
回 5楼(彩阳) 的帖子
是的。也还是想办法把这种问题降为最低吧!
离线yurenjimi

只看该作者 7楼 发表于: 2014-02-24
为什么不使用 QWidget * QWidget::createWindowContainer(QWindow * window, QWidget * parent = 0, Qt::WindowFlags flags = 0) [static] 来创建窗口?
hello world!!
离线yangkun52131

只看该作者 8楼 发表于: 2014-02-24
回 yurenjimi 的帖子
yurenjimi:为什么不使用 QWidget * QWidget::createWindowContainer(QWindow * window, QWidget * parent = 0, Qt::WindowFlags flags = 0) [static] 来创建窗口? (2014-02-24 13:29) 

这个函数之前没有看到。现在我试了试,不出窗口。奇怪!
离线yurenjimi

只看该作者 9楼 发表于: 2014-02-24
回 yangkun52131 的帖子
yangkun52131:
这个函数之前没有看到。现在我试了试,不出窗口。奇怪!

  1. //    main_window window(gl);
  2. //    window.resize(640, 480);
  3.     QWidget *window = QWidget::createWindowContainer(gl);
  4.     window->resize(640, 480);
  5.     lay.addWidget (m_button);
  6.     lay.addWidget (window);
  7.     wid.setLayout (&lay);
  8.     m_button->show ();
window 下完全没有问题啊.
hello world!!
离线yurenjimi

只看该作者 10楼 发表于: 2014-03-01
只是这个方法在 Mac下会有点问题,, OpenGL窗口会被缩放,,现在不知道怎么去处理..
hello world!!
离线yangkun52131

只看该作者 11楼 发表于: 2014-03-11
回 yurenjimi 的帖子
yurenjimi://    main_window window(gl);
//    window.resize(640, 480);
    QWidget *window = QWidget::createWindowContainer(gl);
    window->resize(640, 480);
....... (2014-02-24 21:03) 

恩,可以,我之前是没有设置几何位置。现在修改了,可以用。
离线glion2005

只看该作者 12楼 发表于: 2018-04-10

快速回复
限100 字节
 
上一个 下一个