在QOpenGLWidget上使用Qt5小部件而不重写?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在QOpenGLWidget上使用Qt5小部件而不重写?相关的知识,希望对你有一定的参考价值。

我有一个OpenGL应用程序,我正在考虑移植到Qt5。在绘制场景的其余部分之前,我首先使用正交透视图绘制自己的基本GUI功能。片段着色器不会在已覆盖的像素上运行,而是在GUI上运行。

我找不到任何关于Qt5如何智能的信息。鉴于你可以在OpenGL中使用深度缓冲区,我猜测Qt被迫在事后绘制叠加小部件。

是否可以指示窗口小部件将自身渲染为纹理?如果我在屏幕上渲染纹理,我想我还必须捕获所有输入并手动将其推送到窗口小部件进行处理。

更好的方法是让我按照我想要的方式设置缓冲区,然后触发窗口小部件通过OpenGL直接渲染到QOpenGLWidget中。那可能吗?

答案

看起来他们有任何OpenGL设备(src code)的画家。根据文档,您可以使用画家手动绘制小部件并执行其余的渲染。他们的消息来源显示他们积极使用模板缓冲区。

http://doc.qt.io/qt-5/qopenglwidget.html

也可以使用QPainter将2D图形绘制到QOpenGLWidget子类上:

  • 在paintGL()中,不是发出OpenGL命令,而是构造一个QPainter对象以在小部件上使用。
  • 使用QPainter的成员函数绘制基元。
  • 仍然可以发出直接OpenGL命令。但是,您必须确保通过调用painter的beginNativePainting()和endNativePainting()来封闭它们。

以上是关于在QOpenGLWidget上使用Qt5小部件而不重写?的主要内容,如果未能解决你的问题,请参考以下文章

使用 QOpenGLWidget 进行屏幕外渲染的最简单方法

如何让 qt 设计器自定义 QOpenGLWidget 小部件背景透明?

无法在 QopenGLWidget 中捕获 QkeyEvent

没有子类化的 QOpenGLWidget

QOpenGLWidget 和多线程

Qt5:Android 上的原生外观小部件