QOpenGL开发入门教程01:空界面

系列教程索引:QOpenGL开发入门教程索引

Qt提供了开发时需要的一切,你只需要会熟练使用Qt提供的API就可以了。

本文显示一个空白窗口界面(不是说窗口是白的,而是窗口中不显示任何内容),可以在窗口和全屏模式下切换,按ESC退出,并以此窗口作为后续开发的模板

空界面

new class

这个就是标准的C++类的使用方法

新建一个Qt Widget工程,会自动生成下列文件

1
2
3
4
5
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
*.pro

新建一个类GLWidget

头文件

1
2
3
4
5
6
7
8
9
10
11
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();//初始化OpenGL上下文内容
glClearColor(0.0f,0.0f,0.0f,1.0f);//将缓冲区清空为RGBA指定的颜色
//使用颜色缓冲区、深度缓冲区、RGBA、alpha支持
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();//qt自带的界面刷新函数
}

void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_RGBA|GL_ALPHA_BITS);
}

在mainwindow.cpp构造函数中添加

1
2
glWidget = new GLWidget(this->centralWidget());
glWidget->resize(this->centralWidget()->size());

效果

new

prompt

GLWidget类的代码和new方式的一样

Qt UI设计器中提供了类提升的功能,在设计器中的窗口中添加Qt提供的opengl窗口,并将其提升为GLWidget类

prompt

效果为

prompt

inheirt

继承也是标准C++类的功能,还是之前的GLWidget类,只不过不需要*.ui文件。

在main.cpp中直接调用

1
2
3
4
QApplication a(argc, argv);
GLWindow w;
w.show();
return a.exec();

结果为:

inherit

源代码地址:OpenGL_Beginner在QOpenGL下的1.blank

我在本系列后续的文章中使用的是inherit方法,代码文件少。


QOpenGL开发入门教程01:空界面
https://feater.top/qt/blank-qopengl-window
作者
JackeyLea
发布于
2022年7月4日
许可协议