欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt入门 OpenGL应用(二)

程序员文章站 2022-05-28 11:46:15
...

应用来源

打开Qt Creater在欢迎界面寻找示例,搜索OpenGL,可以看见很多示例程序,打开慢慢看!
Qt入门 OpenGL应用(二)

QGLxx VS QOpenGLxx

或许你在看见本篇博客之前,在网上搜索过类似的文章,有些里面使用的是QGLWidget作为自己写的子类的基类,有些里面使用的是QOpenGLWidget作为自己写的子类的基类。

参考链接

一句话来说,在Qt4中,QtOpenGL的各个接口进一步封装为了QGLxxx,在Qt5中,QtOpenGL的各个接口封装为了QOpenGLxxx

一般情况下都使用QOpenGLWidget作为窗口的基类,然后继承这些基类的接口:
- initializeGL
- resizeGL
- paintGL

Qmainwindow的布局

自己写的稍微简单的Qt应用是没有使用ui文件的,是自己做QGridLayout

比如下图的Qt应用中:
Qt入门 OpenGL应用(二)
分为两个大的部分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的目的。