查看完整版本: [-- Qt5 的QWindow和QWidget组件嵌套方法 --]

QTCN开发网 -> Qt代码秀 -> Qt5 的QWindow和QWidget组件嵌套方法 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

yangkun52131 2013-12-06 13:50

Qt5 的QWindow和QWidget组件嵌套方法

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

       * 还望有大师指点用这种方法进行多线程渲染,能解决上下文共享。
        [attachment=11395]

彩阳 2013-12-07 17:50
做多线程渲染有什么优点?

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

彩阳 2013-12-13 23:45
明白,RTT+纹理投影+视频帧抓取,挺好的,请问这是一个什么系统软件,对性能有什么要求,对画面有什么要求?

yangkun52131 2013-12-17 12:10
主要是媒体系统。使用对帧率要求:普通30帧以上,还有立体显示。所以对画质要求较高。

彩阳 2013-12-22 16:51
我看了一下,多个OpenGL上下文以及共享OpenGL上下文的例子hellowindow,使用了QMutex会防止死锁,但由此产生的性能也会衰减。

yangkun52131 2013-12-24 17:08
是的。也还是想办法把这种问题降为最低吧!

yurenjimi 2014-02-24 13:29
为什么不使用 QWidget * QWidget::createWindowContainer(QWindow * window, QWidget * parent = 0, Qt::WindowFlags flags = 0) [static] 来创建窗口?

yangkun52131 2014-02-24 16:43
yurenjimi:为什么不使用 QWidget * QWidget::createWindowContainer(QWindow * window, QWidget * parent = 0, Qt::WindowFlags flags = 0) [static] 来创建窗口? (2014-02-24 13:29) 

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

yurenjimi 2014-02-24 21:03
yangkun52131:
这个函数之前没有看到。现在我试了试,不出窗口。奇怪!

  1. //    main_window window(gl);
    //    window.resize(640, 480);
        QWidget *window = QWidget::createWindowContainer(gl);
        window->resize(640, 480);


        lay.addWidget (m_button);
        lay.addWidget (window);
        wid.setLayout (&lay);
        m_button->show ();
[attachment=11750] window 下完全没有问题啊.

yurenjimi 2014-03-01 11:57
只是这个方法在 Mac下会有点问题,, OpenGL窗口会被缩放,,现在不知道怎么去处理..

yangkun52131 2014-03-11 11:46
yurenjimi://    main_window window(gl);
//    window.resize(640, 480);
    QWidget *window = QWidget::createWindowContainer(gl);
    window->resize(640, 480);
....... (2014-02-24 21:03) 

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

glion2005 2018-04-10 08:10



查看完整版本: [-- Qt5 的QWindow和QWidget组件嵌套方法 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled