版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/u014328804/article/details/55802753
缘由:从元旦过后开始,由于实验室需要,开始进行再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:
#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
openglwidow.cpp:
#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
参考链接:点击打开链接