系列教程索引:Qt入门索引
库
首先来说明一下基本的库,QOpenGL使用Qt窗口作为显示窗口组件。
QOpenGLFunctions
- 此类提供兼容标准OpenGL绘图函数的所有的核心函数
- 不同版本的Qt支持的OpenGL版本也不一样。比如说Qt5.15.2支持至OpenGL4.5
- 一些函数Qt以其他方式实现
基于Qt+OpenGL的窗口组件
QOpenGL使用的是Qt提供的基础库,但是也可以使用像GLU、GLM等库。
说是库,其实是Qt自带的。
工程模板
接下来介绍后续开发会用到的模板
new class
这个就是标准的C++
类的使用方法
新建一个Qt Widget工程。
会自动生成
| main.cpp mainwindow.cpp mainwindow.h mainwindow.ui *.pro
|
新建一个类GLWidget
头文件
| class GLWidget : public QOpenGLWidget,public QOpenGLFunctions { public: GLWidget(QWidget *parent=nullptr); ~GLWidget();
protected: void initializeGL(); void resizeGL(int w,int h); void paintGL(); };
|
实现文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| GLWidget::GLWidget(QWidget *parent) :QOpenGLWidget(parent) {}
GLWidget::~GLWidget() {}
void GLWidget::initializeGL() { initializeOpenGLFunctions(); glClearColor(0.0f,0.0f,0.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_RGBA|GL_ALPHA_BITS); glEnable(GL_DEPTH_TEST); }
void GLWidget::resizeGL(int w, int h) { glViewport(0,0,w,qMax(h,1)); update(); }
void GLWidget::paintGL() { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_RGBA|GL_ALPHA_BITS); }
|
在mainwindow.cpp构造函数中添加
| glWidget = new GLWidget(this->centralWidget()); glWidget->resize(this->centralWidget()->size());
|
效果

prompt
Qt UI设计器中提供了类提升的功能
GLWidget类的代码和new方式的一样
在设计器中的窗口中添加Qt提供的opengl窗口,并将其提升为GLWidget类

效果为

inheirt
继承也是标准C++类的功能
还是之前的GLWidget类,只不过不需要*.ui文件。
在main.cpp中直接调用
| QApplication a(argc, argv); GLWindow w; w.show(); return a.exec();
|
结果为:

源代码地址:OpenGL_Beginner在QOpenGL下的0.1plain_with_new_class、0.2plain_with_prompt、0.3plain_with_inherit
我在本系列后续的文章中使用的是inherit方法
下一篇:OpenGL入门1:输出版本号