Qt QOpenGLWidget详解

1. 概述

QOpenGLWidget 是 Qt 框架中用于集成 OpenGL 渲染功能的类,它继承自 QWidget,允许开发者在 Qt 应用程序中轻松嵌入 OpenGL 图形。通过继承 QOpenGLWidget 并重写其虚函数(如 initializeGL()resizeGL()paintGL()),可以实现自定义的 OpenGL 渲染逻辑。

2. 重要函数
  • QOpenGLWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
    构造函数,用于创建一个新的 QOpenGLWidget 实例。

  • virtual ~QOpenGLWidget()
    虚析构函数,确保派生类可以正确析构。

  • QOpenGLContext *context() const
    返回当前关联的 QOpenGLContext 对象。

  • GLuint defaultFramebufferObject() const
    返回默认帧缓冲对象的 ID。

  • void doneCurrent()
    完成当前 OpenGL 渲染上下文的操作。

  • QSurfaceFormat format() const
    返回当前窗口的 OpenGL 格式。

  • QImage grabFramebuffer()
    将当前帧缓冲区的内容捕获为 QImage

  • bool isValid() const
    检查当前 OpenGL 上下文是否有效。

  • void makeCurrent()
    将当前窗口的 OpenGL 渲染上下文设置为当前上下文。

  • void setFormat(const QSurfaceFormat &format)
    设置窗口的 OpenGL 格式。

  • void setTextureFormat(GLenum texFormat)
    设置纹理格式。

  • void setUpdateBehavior(QOpenGLWidget::UpdateBehavior updateBehavior)
    设置更新行为(如自动更新或手动更新)。

  • GLenum textureFormat() const
    返回当前的纹理格式。

  • QOpenGLWidget::UpdateBehavior updateBehavior() const
    返回当前的更新行为。

  • virtual void initializeGL()
    初始化 OpenGL 环境,仅在第一次调用 resizeGL()paintGL() 之前调用一次。

  • virtual void paintGL()
    渲染 OpenGL 场景,每当需要更新窗口时调用。

  • virtual void resizeGL(int w, int h)
    处理窗口大小改变时的逻辑,如更新视口和投影矩阵。

3. 重要信号
  • void aboutToCompose()
    在即将进行合成操作时发出信号。

  • void aboutToResize()
    在窗口即将调整大小时发出信号。

  • void frameSwapped()
    在帧交换完成时发出信号。

  • void resized()
    在窗口大小调整完成后发出信号。

4. 常用枚举类型
  • QOpenGLWidget::UpdateBehavior
    用于指定更新行为:

    • NoPartialUpdate:不进行部分更新。

    • PartialUpdate:允许部分更新。

class Widget : public QOpenGLWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr):QOpenGLWidget(parent)
    {
        setFixedSize(600, 480);
    }
    ~Widget(){}

protected:
    void initializeGL() override
    {
        QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
        f->glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
    }
    void resizeGL(int w, int h) override
    {
        QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
        f->glViewport(0, 0, w, h);

    }
    void paintGL() override
    {
        QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
        f->glClear(GL_COLOR_BUFFER_BIT);
    }

};

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/970193.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Webpack包

黑马程序员视频地址: Node.js与Webpack-16.Webpack简介以及体验 前言: 本篇中部分标题后标有数字,代表学习顺序 ,同时也可以作为使用顺序参考 webpack包 基础认识 初步使用 下载webpack包和webpack-cli包 注意点: 1…

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 10

第10章_创建和管理表 DDL:数据定义语言。CREATE \ALTER\ DROP \RENAME TRUNCATE DML:数据操作语言。INSERT \DELETE \UPDATE \SELECT(重中之重) DCL:数据控制语言。COMMIT \…

【DeepSeek】DeepSeek R1 本地windows部署(Ollama+Docker+OpenWebUI)

1、背景: 2025年1月,DeepSeek 正式发布 DeepSeek-R1 推理大模型。DeepSeek-R1 因其成本价格低廉,性能卓越,在 AI 行业引起了广泛关注。DeepSeek 提供了多种使用方式,满足不同用户的需求和场景。本地部署在数据安全、性…

【Pico】使用Pico进行无线串流搜索不到电脑

使用Pico进行无线串流搜索不到电脑 官串方式:使用Pico互联连接电脑。 故障排查 以下来自官方文档 请按照以下步骡排除故障: 确认电脑和一体机连接了相同的路由器WiFi网络(相同网段) IP地址通常为192.168.XX,若两设备的IP地址前三段相同&…

DeepSeek教unity------MessagePack-02

内置支持类型: 对象序列化 MessagePack for C# 可以序列化你自己定义的公共类或结构体类型。默认情况下,可序列化的类型必须用 [MessagePackObject] 属性进行注解,成员需要用 [Key] 属性进行注解。键可以是索引(整数)…

部门管理(体验,最原始方法来做,Django+mysql)

本人初学,写完代码在此记录和复盘 在创建和注册完APP之后(我的命名是employees),编写models.py文件创建表 手动插入了几条数据 1.部门查询 urls.py和views.py在编写之前,都要注意导入对应的库 urls.py:…

爬虫实战:利用代理ip爬取推特网站数据

引言 亮数据-网络IP代理及全网数据一站式服务商屡获殊荣的代理网络、强大的数据挖掘工具和现成可用的数据集。亮数据:网络数据平台领航者https://www.bright.cn/?promoRESIYEAR50/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_yingjie202502 在跨境电商、社…

C#windows窗体人脸识别

一、创建一个数据库,名为TestFaceDB 里面有一张表就OK了,表名Users,表里面有几个字段我说明一下: id--------------------bigint----------------------编号 name--------------varchar(50)-----------------用户名 phone--------------v…

opencv中minAreaRect函数输出角度问题

opencv中minAreaRect函数输出角度问题 新版opencv中minAreaRect函数计算最小外接矩形时,角度范围由旧版的[-90, 0]变为[0, 90]。 cv2.minAreaRect输入:四边形的四个点(不要求顺序)。 输出:最小外接矩形的中心点坐标x…

Eclipse:关闭多余的工具条

Eclipse默认的工具条非常多,可以通过如下方法选择关闭一些不常用的: 1.选择菜单Window -> Perspective -> Customize Perspective 2.根据需要勾选Toolbar Visbility下面的工具条项

电商小程序(源码+文档+部署+讲解)

引言 随着移动互联网的快速发展,电商小程序成为连接消费者与商家的重要桥梁。电商小程序通过数字化手段,为消费者提供了一个便捷、高效的购物平台,从而提升购物体验和满意度。 系统概述 电商小程序采用前后端分离的架构设计,服…

MySQL单表存多大的数据量比较合适

前言 经常使用MySQL数据库的小伙伴都知道,当单表数据量达到一定的规模以后,查询性能就会显著降低。因此,当单表数据量过大时,我们往往要考虑进行分库分表。那么如何计算单表存储多大的数据量合适?当单表数据达到多大的…

Visual Studio Code支持WSL,直接修改linux/ubuntu中的文件

步骤1 开始通过 WSL 使用 VS Code | Microsoft Learn 点击远程开发扩展包。 步骤2 Remote Development - Visual Studio Marketplace 点击install, 允许打开Visual Studio Code。 步骤3 共有4项,一齐安装。 步骤4 在WSL Linux(Ubuntu)中&#xf…

微服务SpringCloud Alibaba组件nacos教程【详解naocs基础使用、服务中心配置、集群配置,附有案例+示例代码】

一.Nacos教程 文章目录 一.Nacos教程1.1 Nacos简介1.2 nacos基本使用直接下载打包服务源码方式启动 1.3 创建nacos客服端1.4 nacos集群配置1.5 nacos配置中心 1.1 Nacos简介 nacos是spring cloud alibaba生态中非常重要的一个组件,它有两个作用: 1:注册…

2024年终总结和2025年规划

2024年的主线是AI基础的学习和读书,虽然AI学习花费了更多的时间,但是读书长久看来于我是更重要的事情,哈哈哈,因此先简单回顾一下读书记忆,回顾我的2024,再展望一下我的2025. 我的2024年记忆 读万卷书&am…

实时云渲染:驱动XR技术产业化腾飞的核心引擎

在科技飞速发展的当下,扩展现实(XR)技术正以前所未有的速度融入人们的生活与工作,为用户打造出沉浸式逼真的虚拟环境。据知名XR媒体XR Today的最新数据显示,2024年全球XR市场规模已突破500亿美元,预计到202…

【AI编程】体验a0.dev:专为移动端app的对话式AI编程工具

摘要 体验专为移动端APP开发的AI编程工具 a0.dev,并附上实践过程和价格说明 体验a0.dev:专为移动端app的对话式AI编程工具 最近在探索新的AI编程工具时,发现了a0.dev,一个专注于移动端应用开发的对话式AI编程工具。今天就和大家分…

基于若依开发的工程项目管系统开源免费,用于工程项目投标、进度及成本管理的OA 办公开源系统,非常出色!

一、简介 今天给大家推荐一个基于 RuoYi-Flowable-Plus 框架二次开发的开源工程项目管理系统,专为工程项目的投标管理、项目进度控制、成本管理以及 OA 办公需求设计。 该项目结合了 Spring Boot、Mybatis、Vue 和 ElementUI 等技术栈,提供了丰富的功能…

数据库数据恢复—MongoDB丢失_mdb_catalog.wt文件导致报错的数据恢复案例

MongoDB数据库存储模式为文档数据存储库,存储方式是将文档存储在集合之中。 MongoDB数据库是开源数据库,同时提供具有附加功能的商业版本。 MongoDB中的数据是以键值对(key-value pairs)的形式显示的。在模式设计上,数据库受到的约束更少。这…

小米 R3G 路由器(Pandavan)实现网络打印机功能

小米 R3G 路由器(Pandavan)实现网络打印机功能 一、前言 家中有多台 PC 设备需要打印服务,但苦于家中的 Epson L380 打印机没有网络打印功能,并且配置 Windows 共享打印机实在是过于繁琐且需要共享机保持唤醒状态过于费电。想到…