0

是否可以剪切 QGLWidget?我的意思是我想剪掉它,这样我就可以访问下面的 gui。这听起来很奇怪,但是将我的 QGLWidget 分成两部分对我来说需要做很多工作。我希望你明白我的意思。谢谢

4

1 回答 1

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教程的结果如下所示:在此处输入图像描述

于 2011-08-23T11:39:11.293 回答