学习笔记0--如何在Qt5中嵌入一个OpenGL程序部件

版权声明:本文为博主原创文章,欢迎转载。 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

参考链接点击打开链接

猜你喜欢

转载自blog.csdn.net/u014328804/article/details/55802753
今日推荐