opengl 是否剪切QGLWidget?

j2datikz  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(93)

有没有可能剪切一个QGLWidget?我的意思是我想剪切它,这样我就可以访问下面的gui了。这听起来很奇怪,但是对我来说,把我的QGLWidget分成两部分是一件很大的工作。我希望你能理解我的意思。

jbose2ul

jbose2ul1#

我不完全理解你所说的“剪切”和下面的GUI是什么意思。在Qt中,如果布局机制使用得当,一个小部件会消耗它所覆盖的区域,而在它下面没有小部件。
您想将多个视图渲染到一个QGLWidget中吗?这可以通过正确使用 glViewport + glScissor 轻松实现。

由于注解而编辑

有两种窗口:

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

子窗口又有两个特点:

  • 逻辑子
  • 真实的的孩子

一个逻辑子窗口只由它的位置、维度和层次组成,并由工具包管理。从操作系统的Angular 来看,只有一个顶级窗口。工具包管理它的内部状态,以在顶级窗口中给予独立的兄弟窗口的印象。
一个真实的的子窗口由操作/图形系统管理。这样的真正的子窗口可以与它们的父窗口和兄弟窗口共享它们的图形上下文。然而,只有当在其中创建了OpenGL上下文的窗口具有它自己的图形上下文时,OpenGL才能工作得很好。因此,任何OpenGL子窗口都不可避免地将具有它自己的图形上下文和图形系统窗口对象。大多数图形系统都不具有它自己的图形上下文。不正确地支持将形状应用到子窗口(仅顶层窗口,并且这也与OpenGL冲突)。
因此,这一切归结起来,它实际上是不可能的,也不建议尝试“层”一个OpenGL窗口上的兄弟。它可能在某些情况下工作,但大多数时候它不会。
这就是坏消息。
好消息是,您只是看错了方向。我在此将您的观点指向 QGraphicsView。QGraphicsView支持OpenGL作为后端,您也可以编写自己的OpenGL渲染器代码在QGraphicsView中执行。此外,QGraphicsView还可以用于渲染小部件,也使用OpenGL。所以你所要做的就是把你的OpenGL渲染代码和你的小部件都放入一个公共的QGraphicsView场景中,就完成了。这里是一个教程http://www.crossplatform.ru/node/612教程的结果看起来像这样:

相关问题