Qt入门 OpenGL应用(二)
程序员文章站
2022-05-28 11:46:15
...
应用来源
打开Qt Creater
在欢迎界面寻找示例,搜索OpenGL,可以看见很多示例程序,打开慢慢看!
QGLxx VS QOpenGLxx
或许你在看见本篇博客之前,在网上搜索过类似的文章,有些里面使用的是QGLWidget
作为自己写的子类的基类,有些里面使用的是QOpenGLWidget
作为自己写的子类的基类。
一句话来说,在Qt4
中,Qt
将OpenGL
的各个接口进一步封装为了QGLxxx
,在Qt5
中,Qt
将OpenGL
的各个接口封装为了QOpenGLxxx
。
一般情况下都使用QOpenGLWidget
作为窗口的基类,然后继承这些基类的接口:
- initializeGL
- resizeGL
- paintGL
Qmainwindow的布局
自己写的稍微简单的Qt应用是没有使用ui文件的,是自己做QGridLayout
。
比如下图的Qt应用中:
分为两个大的部分Qmenu和Qwidget,见两个红框:
- Qmenu
- Qwidget
在Qwidget中,又可以分为八个部分,见绿框包括的八个组件:
- Qlabel
- Qlabel
- QPushButton
- ZWidget
- ZWidget
- ZWidget
- QPushButton
- QSlider
ZWidget是渲染OpenGL的窗口,是本次讨论的重点。
ZWidget
ZWidget
类继承自QOpenGLwidget
类,和QOpenGLFunctions
类。
class ZWidget :public QOpenGLWidget, protected QOpenGLFunctions
{
Q_OBJECT
...
}
QOpenGLFunctions
类中封装了各样的OpenGL接口,QOpenGLWidget
类中有三个重要的虚函数:
virtual void initializeGL();
virtual void resizeGL(int w, int h);
virtual void paintGL();
我们只需要在自己的Zwidget
类中重载这三个重要的虚函数,就可以达到绘制OpenGL的目的。