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:
    
### 如何在Qt使用OpenGL 为了实现基于Qt的应用程序中的OpenGL功能,可以创建继承自`QOpenGLWidget`的类来处理渲染逻辑。此类提供了用于初始化OpenGL资源和状态的方法以及绘制场景的方法[^3]。 #### 创建项目结构 首先,在Qt Creator环境中新建一个Qt Widgets Application项目。这将提供必要的框架文件以便集成OpenGL组件。 #### 设置CMakeLists.txt配置 对于采用CMake构建系统的工程而言,需确保已正确设置依赖项以支持OpenGL开发环境。例如: ```cmake find_package(Qt5 COMPONENTS OpenGL REQUIRED) add_executable(MyOpenGLApp ${SOURCE_FILES}) target_link_libraries(MyOpenGLApp PRIVATE Qt5::Widgets Qt5::OpenGL) ``` 上述代码片段展示了如何查找所需的Qt模块并将它们链接到应用程序目标上[^4]。 #### 实现自定义OpenGL Widget 接下来定义一个新的类MyGLWidget,它派生于`QOpenGLWidget`并重写三个虚函数:`initializeGL()`、`resizeGL(int w,int h)` 和 `paintGL()`. 下面是一个简化版的例子展示怎样在一个黑色背景下的中心位置绘制白色矩形[^2]: ```cpp #include <QOpenGLWidget> #include <QOpenGLFunctions> class MyGLWidget : public QOpenGLWidget, protected QOpenGLFunctions { protected: void initializeGL() override { initializeOpenGLFunctions(); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); } void resizeGL(int width, int height) override {} void paintGL() override { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_QUADS); glColor3f(1.0f, 1.0f, 1.0f); glVertex2f(-0.5f, -0.5f); glVertex2f( 0.5f, -0.5f); glVertex2f( 0.5f, 0.5f); glVertex2f(-0.5f, 0.5f); glEnd(); glFlush(); } }; ``` 此部分实现了基本图形上下文初始化(`initializeGL`),调整视口大小时调用 (`resizeGL`) ,还有最重要的绘图操作(`paintGL`). #### 将自定义控件嵌入主界面布局 最后一步是修改项目的UI设计文件(.ui),通过拖拽方式把新创建的小部件放置于窗体内部适当的位置;或者直接编辑源码手动添加实例化对象至父容器内: ```cpp // In MainWindow constructor after setupUi(this); MyGLWidget *glWidget = new MyGLWidget(this); centralWidget()->layout()->addWidget(glWidget); ``` 这样就完成了一个简单却完整的案例——利用Qt平台特性结合现代OpenGL API进行二维形状呈现的任务.
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值