是否可以剪切QGLWidget?我的意思是我想削减它,以便我可以访问下面的gui。这听起来很奇怪,但将我的QGLWidget分成两部分对我来说将是很多工作。我希望你明白我的意思。谢谢
答案 0 :(得分: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,教程的结果如下所示: