應用來源
打開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的目的。