1、QOpenGLWidget:不需要GLFW
QOpenGLWdiget提供了三个便捷的虚函数,可以重载,用来重新实现典型的OpenGL任务:
.panitGL:渲染OpenGL场景。widget需要更新时调用。
.resizeGL:设置OpenGL视口、投影等。widget调整大小(或首次显示)时调用。
.initializeGL:设置OpenGL资源和状态。第一次调用resizeGL()/panitGL()之前调用一次。
2、如果需要从panitGL()以外的位置触发重新绘制(典型实例是使用计时器设置场景动画),则应调用widget的update()函数来更新。
3、调用paintGL()、resizeGL()或initializeGL()时,widget的OpenGL呈现上下文将变为当前。如果需要从其他位置,(例如,在widget的构造函数或自己的绘制函数中)调用OpenGL API函数,则必须首先调用makeCurrent().
在paintGL()以外的地方调用绘制函数,没有意义。绘制图像最终将被paintGL()覆盖。
4、QOpenGLFunctions_x_x_Core:不需要GLAD
.QOpenGLFunction_x_xCore提供OpenGLx.x核心模式的所有功能。是对OpenGL函数的封装:
.initializeOpenGLFunctions:初始化OpenGL函数,将Qt里的函数指针指向显卡的函数。
5、例
glClearColor(0.2f,0.3f,0.3f,1.0f); //设置状态
glClear(GL_COLOR_BUFFER_BIT); //使用状态
6、新建qt工程,样式设置
QWidget{ background-color:rgb(68,68,68); color:rgb(255,255,255); font:10pt"幼圆"; } QMenuBar{ background-color:rgb(200,200,200); color:rgb(60,60,60); }
7、拖一个QOpenGLWidget空间到ui上
8、新建一个Openwidget类,继承QOpenGLWidge 和 QOpenGLFunctions_3_3_Core
9、重写虚函数 initializeGL() 、 reizeGL(int w,int h)、paintGL()
10、头文件代码
#ifndef OPENGLWIDGET_H #define OPENGLWIDGET_H #include <QOpenGLWidget> #include <QOpenGLFunctions_3_3_Core> class Openglwidget : public QOpenGLWidget,public QOpenGLFunctions_3_3_Core { Q_OBJECT public: explicit Openglwidget(QWidget *parent = nullptr); signals: protected: virtual void initializeGL() override; virtual void resizeGL(int w,int h) override; virtual void paintGL() override; }; #endif // OPENGLWIDGET_H
11、源文件代码
标签:widget,调用,函数,OpenGL,opengl,程序,initializeGL,paintGL,qt From: https://www.cnblogs.com/RedWetPlace/p/17235329.html