OpenGL + QT使用,UI中OpengGLWidget窗体嵌入

Introduction

挣扎于各大博客教程皆不完全对的情况,浪费了很多时间。经过stackoverflow上一个兄dei的指点,才成功。

效果

在这里插入图片描述

实现

在UI编辑中拖出OpengGLWidget放置于任何一个想嵌入的窗体中。回到代码编辑中,新建一个c++ header,如"glTriangle.h"

#ifndef GLTRIANGLE_H
#define GLTRIANGLE_H!


#include <QWidget>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <gl/GLU.h>
#include <gl/GL.h>

class GLTriangle : public QOpenGLWidget, protected QOpenGLFunctions
{
    Q_OBJECT
public:
    GLTriangle(QWidget *parent = nullptr);
    ~GLTriangle();
protected:
    void initializeGL() override;
    void paintGL() override;
    void resizeGL(int width, int height) override;
private:
};
#endif // GLTRIANGLE_H

第二步,新建该类的实现。“glTriangle.cpp”

#include "gltriangle.h"

GLTriangle::GLTriangle(QWidget *parent) : QOpenGLWidget(parent)
{
}

GLTriangle::~GLTriangle()
{
}

void GLTriangle::initializeGL()
{
    initializeOpenGLFunctions();
    glClearColor(0.1,0.1,0.1,1);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHT0);
    glEnable(GL_LIGHTING);
    glEnable(GL_COLOR_MATERIAL);
}

void GLTriangle::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glBegin(GL_TRIANGLES);
    glColor3f(1.0, 0.0, 0.0);
    glVertex3f(-0.5, -0.5, 0);
    glColor3f(0.0, 1.0, 0.0);
    glVertex3f( 0.5, -0.5, 0);
    glColor3f(0.0, 0.0, 1.0);
    glVertex3f( 0.0,  0.5, 0);
    glEnd();
}

void GLTriangle::resizeGL(int width, int height)
{
    glViewport(0,0,width,height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
}

第三步,回到UI编辑。右击刚拖出来的OpenGLWidget块体,选择“提升为promoted as”,提升的类名称输入刚才定义的类名,确认headfile是刚才定义的头文件,然后点击添加。关闭对话框后,右击“提升为”,选择刚才创建的类名。
在这里插入图片描述
第四步,如果编译链接报错,说找不到对应的库,需要打开工程项目文件xxx.pro,加入一行把openg给link进来。

LIBS += -lopengl32

技术回顾

Qt5.x (x>4) 版本提供了QOpenGLWidget类,只要继承该类,并实现对应的三个虚函数就能显示。

    void initializeGL() override;
    void paintGL() override;
    void resizeGL(int width, int height) override;

函数原型如下
在这里插入图片描述

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值