0

我正在为客户更新应用程序。

他们使用 Qt,目前使用 QGLWidget 来显示通过单击相应单选按钮选择的 4 个可能摄像机中的 1 个的全屏视图。然后他们使用 OpenGL 在显示的图像上绘图。这很好用,但他们希望更新 UI 以包含所有 4 个摄像头的四分割视图。

我对如何实现这一点的第一个想法是保留一个 QGLWidget 用于全屏显示,并有 4 个小 QGLWidgets 用于四分割。从文档中我发现您不能重叠 QGLWidgets 或 QOpenGLWidgets,因为它们不能正确处理 z 顺序,但这可以通过使用 QOpenGLWindows 和 QWidget::createWindowContainer 来完成。

所以,我编写了一个应用程序,它使用 QOpenGLWidget(试图使它们更新)作为全屏视图,并使用 QWidget::createWindowContainer 编写了 4 个较小的 QOpenGLWindows,但这也不起作用。

即使我使用 lower() 试图将它们放在全屏 QOpenGLWidget 后面,从 QOpenGLWindows 构建的小部件始终位于顶部。我还尝试在从 QOpenGLWindows 构建的小部件上使用 hide(),但是,这没有任何效果。

4

1 回答 1

0

在较低级别执行此操作。保留一个 QGLWidget——事实上不要碰你的 Qt 对象。相反,更改较低级别的呈现,使其对glViewport.

每次调用 后glViewport,根据感兴趣的相机更新模型视图和投影和矩阵,然后绘制 3D 场景。

这既简单又高效,因为驱动程序只需要处理单个 OpenGL 上下文。您可能需要做一些额外的工作来调整鼠标输入,但我认为这是值得的。

于 2019-11-12T20:44:09.780 回答