削减QGLWidget?

bud*_*ddy 0 opengl macos qt qglwidget

是否有可能削减QGLWidget?我的意思是我想削减它,以便我可以访问下面的gui.这听起来很奇怪,但将我的QGLWidget分成两部分对我来说将是很多工作.我希望你明白我的意思.谢谢

dat*_*olf 5

我不完全明白你的意思是"剪切"和下面的GUI.在Qt中,正确使用了布局机制,小部件会占用它所覆盖的区域,并且它下面没有小部件.

是否要将多个视图渲染到单个QGLWidget中?通过正确使用glViewport + glScissor可以轻松实现这一点.


编辑由于评论

有两种窗口:

  • 顶级(您可以在屏幕上自由移动的那些)
  • 子窗口(子窗口,如顶级窗口中的窗口小部件或窗格)

子窗口又有两个特点:

  • 逻辑的孩子
  • 真正的孩子

逻辑子窗口只包含其位置,维度和层,并由工具包管理.从操作系统的角度来看,只有一个顶级窗口.工具包是管理其内部状态以在顶层窗口中给出独立兄弟窗口的印象.

真实的子窗口由操作/图形系统管理.这样的真实子窗口可以与其父母和兄弟共享他们的图形上下文.但是,如果创建OpenGL上下文的窗口具有其自己的图形上下文,则OpenGL仅适用.因此,任何OpenGL子窗口都不可避免地会有自己的图形上下文和图形系统窗口对象.大多数图形系统都没有正确支持将形状应用到子窗口(仅适用于窗口,然后这也与OpenGL冲突).

所以这简直归结为,几乎不可能,也不建议尝试在兄弟之上"分层"OpenGL窗口.它可能在某些情况下有效,但大部分时间都不会.

这是坏消息.

好消息是,你只是看着一个稍微错误的方向.我特此指导您对QGraphicsView的看法.QGraphicsView支持OpenGL作为后端,您也可以编写自己的OpenGL渲染器代码,以便在QGraphicsView中执行.但是,QGraphicsView还可以用于渲染小部件,也可以使用OpenGL.因此,您所要做的就是将OpenGL渲染代码和窗口小部件放入一个常见的QGraphicsView场景中并完成.这是一个教程http://www.crossplatform.ru/node/612,教程的结果如下所示:在此输入图像描述