0


QGLWidget,QOpenGLWidget和QOpenGLWindow简介

1.QGLWidget

QGLWidget 是Qt库提供的一个类,用于创建基于OpenGL的应用程序。它是QWidget类的子类,提供了基本的显示OpenGL图形功能。它还提供了一些额外的功能,用于与OpenGL上下文交互,例如基于事件的机制处理键盘和鼠标输入,以及在多个窗口部件之间共享OpenGL资源的能力。

使用QGLWidget的主要优点是它允许您轻松地将OpenGL图形集成到基于Qt的应用程序中,并提供了一种简单一致的方式来处理OpenGL上下文和事件。

要使用QGLWidget,需要包含适当的头文件并链接到QtOpenGL库。然后可以创建一个QGLWidget对象并在应用程序中作为常规窗口部件使用。您还可以对QGLWidget进行子类化并重写其虚拟方法,例如initializeGL()和paintGL(),以添加自己的OpenGL渲染代码。

需要注意的是QGLWidget已被认为是遗留类,建议使用QOpenGLWidget或QOpenGLWindow来代替。

2.1QOpenGLWidget

QOpenGLWidget是Qt库提供的一个类,用于创建基于OpenGL的应用程序。它是QOpenGLWindow类的子类,提供了基本的显示OpenGL图形功能。它还提供了一些额外的功能,用于与OpenGL上下文交互,例如基于事件的机制处理键盘和鼠标输入,以及在多个窗口部件之间共享OpenGL资源的能力。

使用QOpenGLWidget的主要优点是它允许您轻松地将OpenGL图形集成到基于Qt的应用程序中,并提供了一种简单一致的方式来处理OpenGL上下文和事件。QOpenGLWidget是为了更现代,更高效地替代QGLWidget而设计的,并且推荐用于新的开发。它支持例如使用现代OpenGL核心配置文件和在多线程中使用OpenGL上下文等功能。

2.2QOpenGLWidget函数简介

QOpenGLWidget有一个update()函数,它是QWidget类中的函数(QOpenGLWidget继承于QWidget),用于请求重绘窗口部件。 update()函数会立即重绘窗口部件,并触发paintEvent()事件。

还有一个updateGL()函数,它是QOpenGLWidget中的函数,用于请求重绘OpenGL渲染的部分,它会立即重绘OpenGL窗口部件,并触发paintGL()事件。

QOpenGLWidget也提供了一个**paintEvent()**函数,它是QWidget类中的虚拟函数,用于绘制窗口部件。 如果你需要在QOpenGLWidget上绘制2D图形,可以在paintEvent()中使用QPainter绘制。

如果你需要绘制OpenGL图形,可以在paintGL()函数中使用OpenGL函数绘制。

值得注意的是,update()和updateGL()函数只是请求重绘,而paintEvent()和paintGL()函数则是绘制的实际操作。

3.QOpenGLWindow

QOpenGLWindow是Qt中用来提供更底层的OpenGL渲染支持的类。 它是QWindow的子类,提供了基本的OpenGL渲染功能。

QOpenGLWindow提供了一组虚拟函数,用于在窗口渲染时调用,如initializeGL()和paintGL()。 可以在这些函数中使用OpenGL函数来绘制图形。

QOpenGLWindow也提供了一些额外的功能,用于在多线程中使用OpenGL上下文,并支持使用现代OpenGL特性。

QOpenGLWindow 是QOpenGLWidget的替代品,它提供了更底层的渲染支持。

QOpenGLWindow 是 QWindow 的子类。 QWindow 是Qt中用来表示一个窗口的类。 QOpenGLWindow 扩展了 QWindow 的功能,添加了支持OpenGL渲染的功能。

QOpenGLWindow继承自QWindow,并且通过继承QWindow来实现了更底层的OpenGL渲染功能。 QWindow提供了窗口的基本功能,如窗口创建,大小,标题等,而QOpenGLWindow则增加了支持OpenGL渲染的功能。

4.能在QOpenGLWidget上用QPainter吗?

QOpenGLWidget是用来渲染OpenGL图形的,而QPainter是Qt的绘图类,用来绘制2D图形。

在QOpenGLWidget上使用QPainter可以通过重写paintEvent()函数来实现,在这个函数中可以使用QPainter绘制2D图形。

但是需要注意的是这样会有一些性能问题,因为QPainter在渲染2D图形时会使用软件渲染,而QOpenGLWidget使用硬件渲染,这两种方式并不能很好的兼容,在使用时可能会带来一定的性能问题。

如果你只需要绘制少量的2D图形,可以使用QPainter在paintEvent()中绘制,如果你需要绘制大量的2D图形,建议使用Qt的其他窗口部件,如QWidget,QGraphicsView等。当然,对于QOpenGLWindow来说也是如此。


标签: qt c++ ui

本文转载自: https://blog.csdn.net/m0_57236802/article/details/128660358
版权归原作者 我想要身体健康 所有, 如有侵权,请联系我们删除。

“QGLWidget,QOpenGLWidget和QOpenGLWindow简介”的评论:

还没有评论