Qt5.9.4中利用QOpenGLWidget类进行opengl绘图

首先打开Qt Creator,然后点击菜单 ,文件->新建文件和项目,如图所示:


左边选择Application,右边选择Qt Widgets Application,点击Choose...,


项目名称为myOpenGLShow,接着下一步,一直默认,到Details,如下:


点击取消选中创建界面(G)。

然后下一步,知道完成,程序显示的为mainwindow.cpp文件:


接着是利用QOpenGLWidget类,为了显示自定义的opengl绘制函数,我们新建一个继承QOpenGLWidget类的自定义类。

选中项目文件,右键->添加新文件,如图所示:


选择C++类,choose...,如图所示:


类的名称为myopenGL,同时继承Qwidget(组件)类。点击下一步直到完成,此时工程目录下添加了myopenGL.cpp,myopenGL.h文件。


接着在myopengl.h中进行操作,首先添加四个头文件:

#include <GL/gl.h>
#include <GL/glu.h>
#include<QOpenGLWidget>
#include"QOpenGLFunctions"
然后将myopenGl的继承类改为public QOpenGlWidget,protected QOpenGLFuctions(在.h和.cpp文件中都需要修改)同时重载QopenGLWidget类中的
initializeGL(),resizeGL(),paintGL()三个函数。如图所示:


然后是在myopengl.cpp中进行操作,首先写重载的三个函数:

void myopenGL::initializeGL()
{
    initializeOpenGLFunctions();
    glClearColor(0,0,0,1);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHT0);
    glEnable(GL_LIGHTING);
    glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
    glEnable(GL_COLOR_MATERIAL);
   // cout<<glGetString(GL_VERSION)<<endl;
}
 
void myopenGL::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
        glBegin(GL_TRIANGLES);
        glColor3f(1.0, 0.0, 0.0);
        glVertex3f(-5, -5, 0);
        glColor3f(0.0, 1.0, 0.0);
        glVertex3f( 5, -5, 0);
        glColor3f(0.0, 0.0, 1.0);
        glVertex3f( 0.0,  5, 0);
    glEnd();
}
void myopenGL::resizeGL(int width, int height)
{
    glViewport(0,0,width,height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-width/2,width/2,-height/2,height/2,-1,1);
    glMatrixMode(GL_MODELVIEW);
}
 
 
 

所要绘制的东西在paintGL函数中,使用glBegin()和glEnd()固定模式,代码的具体含义读者可以查找网络上其他的资源,此处重点是讲解如何写自己的openGL类来实现目标的绘制。

接着是在mainwindow.h文件中进行操作,添加头文件:

#include"myopengl.h"

同时添加一个myopenGl成员对象,如下所示:


然后是在mainwindow.cpp文件中进行操作,在其构造函数中添加如下代码:


代码含义,如注释所示。

运行:


则可以看到paintGL中绘制的对象显示出来,此处我们定义了一个新类myopenGL,这个类就是我们自己的资源了,在其他工程中我们,只需要添加myopenGL.h,myopenGL到工程中,就可以用自定义的openGL类进行绘图了。

下面介绍常见的错误:


解决办法:在工程pro中添加:

QT +=core gui opengl
LIBS+=-lopengl32 -lglu32

申明程序调用openGL以及对应的库。

错误二:如果程序运行的结果为白框,不为黑框。

解决办法:可在main.cpp中,main函数第一行添加如下代码:

 QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);

设置调用的OpenGL的版本。

到这里相信读者已经掌握了如何用自定义的openGL类来绘图了,如果有任何疑问可以下载源码仔细研究。

  • 15
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHPCWWHSU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值