QT中OpenGL开发起步

本文介绍了在QT 5.6.2和VS 2013环境下,如何搭建OpenGL开发环境。首先概述了QT基础,强调了选择不带UI文件的工程类型以保持代码控制的简洁性。接着讨论了QT中封装的OpenGL,包括QOpenGLWidget和QOpenGLFunctions等类,简化了初始化和绘图过程。然后提到QT中使用原生OpenGL时遇到的问题,如与QT内建OpenGL的冲突,并提供了解决方案,即通过分离类的声明和定义来隔离两者。最后展示了实现效果并鼓励读者交流反馈。
摘要由CSDN通过智能技术生成

OpenGL中环境搭建

近期由于需要做一个GUI展示的OpenGL程序,因此想到用QT来做界面,需要在QT中写OpenGL,配完环境后,在这里总计一下。

QT基础

总体看来,QT的版本较为混乱,有时候傻傻弄不清楚,QT dialog/widget/mainwindow。又需要有界面,又要有pro文件,一圈下来,加上网上教程版本混乱,已经凌乱了。后来在同学帮助下,看了一些博客教程,综合了一下,总算把架子搭起来了。本文使用的版本信息如下:
QT版本:QT 5.6.2
VS版本:VS 2013

工程选择:
本文选择的是QT的widgt类别,QT各个类别的区别在于继承于不同的基类,正常的widgt是最基础的,不默认含有菜单栏这些东西,需要的话我们自己添加。选择建立工程时不建立UI文件,在编程中发现使用UI文件会较为混乱,不方便控制,因此代码中所有的UI都是由代码控制的。以下是代码结构:

// main.cpp
// main是主入口,QApplication是生成一个QT应用,widget是继承自Qwidget的子类,具有show函数,实例化后将会产生一个窗口,同时我们也可以在main函数中实例化多个窗口,将会有多个界面,比如实例化一个button。
#include "widget.h"
#include <QApplication>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
// 主窗口
    Widget w;
    w.show();
// 实例化一个button
    QPushButton q;
    q.show();
    return a.exec();
}

实例化button的效果:
这里写图片描述

所以,主要的工作就是往我们的widget类中添加控件,实现功能即可。主widget代码如下,继承自QWeidget:

class Widget : public QWidget
{
    Q_OBJECT// 一个宏,声明为QT的object,方便传参

public:
    Widget(QWidget *parent = 0);
    ~Widget();    
    Q_OpenGL *q_widget_1;
    Q_OpenGL *q_widget_2;
    QGridLayout * main_layout;
    QPushButton * q_pushbutton_1;
    QPushButton * q_pushbutton_2;
    QMenuBar * q_menubar;
    QMenu * q_menu;
    QStatusBar * q_status;
    QLabel * q_label;

public slots:
    void triggerMenu(QAction * qa);
};

QT中的OpenGL

QT中为我们把OpenGL进行了封装,使用较原生OpenGL简单

  • QT中的OpenGL,已经包含了OpenGL的大部分功能,包含如下头文件
    • OpenGLWindow
    • QOpenGLWidget
    • QOpenGLFunctions
    • QOpenGLBuffer

在QT中写OpenGL需要继承自QOpenGLWidget,同时重写两个函数initializeGL【初始化OpenGL环境】和paintGL【主绘画的循环】。相对于原生的OpenGL复杂的初始化和绘制过程,十分简洁。以下是头文件和部分源代码。

// .h
class Q_OpenGL:public QOpenGLWidget,protected QOpenGLFunctions
{
    Q_OBJECT

public:
    explicit Q_OpenGL(QWidget *parent = 0);
    ~Q_OpenGL();
    void initializeGL();// 初始化
    
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值