學習筆記0--如何在Qt5中嵌入一個OpenGL程式部件
阿新 • • 發佈:2019-02-01
緣由:從元旦過後開始,由於實驗室需要,開始進行再Qt5中的OpenGL的開發任務,在剛開始任務時,困難重重,想必也有網友會遇到與我相同或者類似的問題,故整理一些我自己在開發過程中的一些值得參考部分與大家分享,如有版權問題,請直接留言與我聯絡。
在Qt5中開發OpenGL時,你會發現原來舊的Qt OpenGL板塊已經不推薦在新程式碼中使用,新的OpenGL的類已經被包含在Qt GUI和Qt Widgets中,本例將使用新的類來建立一個內嵌在視窗中的OpenGL部件。
具體步驟:
(1)新建一個Qt Widgets Application工程,選擇QMainWindow作為基類(當然其它也可以);
(2)設計ui檔案(圖1);
選擇一個Widget控制元件拖入視窗,選擇在視窗中進行柵格佈局
圖1
(3)新增繪製OpenGL的類(圖2);
圖2
修改openglwindow類的檔案:
openglwindow.h:
openglwidow.cpp:#ifndef OPENGLWINDOW_H #define OPENGLWINDOW_H #include <QOpenGLWidget> #include <QOpenGLFunctions_3_3_Core> class openglwindow : public QOpenGLWidget, protected QOpenGLFunctions_3_3_Core { Q_OBJECT public: openglwindow(QWidget *parent = 0); ~openglwindow(); void initializeGL(); void resizeGL(int width, int height); void paintGL(); }; #endif // OPENGLWINDOW_H
#include "openglwindow.h" openglwindow::openglwindow(QWidget *parent) :QOpenGLWidget(parent) { //設定OpenGL的版本資訊 QSurfaceFormat format; format.setRenderableType(QSurfaceFormat::OpenGL); format.setProfile(QSurfaceFormat::CoreProfile); format.setVersion(3,3); setFormat(format); } openglwindow::~openglwindow() { } void openglwindow::initializeGL() { //初始化OpenGL函式 initializeOpenGLFunctions(); //設定全域性變數 glClearColor(0.0f, 0.0f, 0.0f, 1.0f); } void openglwindow::paintGL() { //清理螢幕 glClear(GL_COLOR_BUFFER_BIT); } void openglwindow::resizeGL(int width, int height) { //未使用 Q_UNUSED(width); Q_UNUSED(height); }
(4)控制元件提升為已建立的類(圖3);
圖3
先新增openglwindow類,在將Widget控制元件提升為該類即可。
好了,經過以上步驟後點擊執行就可以看到效果(圖4)。
圖4
編譯環境及版本:Win10企業版+Qt 5.7.0(MSVC 2013, 32bit)+OpenGL3.3 Core Profile