qt QOffscreenSurface详解
1、概述
QOffscreenSurface 是 Qt 中用于离屏渲染的一个类。它允许在不直接与屏幕交互的情况下进行 OpenGL 渲染操作,常用于生成纹理、预渲染场景等。通过 QOffscreenSurface,可以在后台创建一个渲染表面,进行绘制操作,并将结果捕获为 QImage 或其他格式。
2. 重要方法
-
构造函数
QOffscreenSurface::QOffscreenSurface(QScreen *targetScreen = nullptr); QOffscreenSurface::QOffscreenSurface(QScreen *targetScreen, QObject *parent);-
创建一个离屏表面对象,可指定目标屏幕和父对象。
-
-
析构函数
virtual QOffscreenSurface::~QOffscreenSurface();-
销毁离屏表面对象,释放相关资源。
-
-
创建和销毁
void QOffscreenSurface::create(); void QOffscreenSurface::destroy();-
create():创建离屏表面。 -
destroy():销毁离屏表面,释放相关资源。
-
-
有效性检查
bool QOffscreenSurface::isValid() const;-
检查离屏表面是否有效。
-
-
原生句柄操作
void *QOffscreenSurface::nativeHandle() const; void QOffscreenSurface::setNativeHandle(void *handle);-
获取和设置离屏表面的原生句柄。
-
-
格式操作
QSurfaceFormat QOffscreenSurface::requestedFormat() const; void QOffscreenSurface::setFormat(const QSurfaceFormat &format); virtual QSurfaceFormat QOffscreenSurface::format() const override;-
获取和设置离屏表面的请求格式。
-
format():获取当前表面的实际格式。
-
-
屏幕操作
QScreen *QOffscreenSurface::screen() const; void QOffscreenSurface::setScreen(QScreen *newScreen);-
获取和设置离屏表面的目标屏幕。
-
-
尺寸获取
virtual QSize QOffscreenSurface::size() const override;-
获取离屏表面的尺寸。
-
-
表面类型获取
virtual QSurface::SurfaceType QOffscreenSurface::surfaceType() const override;-
获取离屏表面的表面类型。
-
3. 信号
-
屏幕更改信号
void screenChanged(QScreen *screen);-
当离屏表面的目标屏幕发生变化时发出此信号,
screen参数表示新的目标屏幕。
-
4. 常用枚举
QOffscreenSurface 本身没有定义枚举,但它使用了 QSurfaceFormat 类中的枚举,例如:
-
QSurfaceFormat::FormatOptions
-
AlphaBuffer:启用 alpha 缓冲区。
-
DepthBuffer:启用深度缓冲区。
-
StencilBuffer:启用模板缓冲区。
-
Samples:多重采样抗锯齿的样本数。
-
#include "renderthread.h"#include <QDebug>
#include <QOpenGLContext>
#include <memory>RenderThread::RenderThread(QOpenGLContext *mainContext, QObject *parent): QThread(parent), m_mainContext(mainContext)
{m_surface = new QOffscreenSurface();m_surface->setFormat(mainContext->format());m_surface->create();m_renderContext = new QOpenGLContext;m_renderContext->setFormat(m_mainContext->format());m_renderContext->setShareContext(m_mainContext);m_renderContext->create();m_renderContext->moveToThread(this);
}RenderThread::~RenderThread()
{wait();
}void RenderThread::setNewSize(int width, int height)
{QMutexLocker lock(&m_mutex);m_width = width;m_height = height;
}void RenderThread::runTask()
{//qDebug() << "run:" << QThread::currentThreadId();m_renderContext->makeCurrent(m_surface);if(renderer == nullptr){renderer = new Renderer();renderer->moveToThread(this);}int width = 0;int height = 0;{QMutexLocker lock(&m_mutex);width = m_width;height = m_height;}renderer->render(width, height);FpsCounter::instance()->frame(FpsCounter::Render);m_renderContext->doneCurrent();emit imageReady(renderer->front_fbo.texture);
}

demo:点击跳转
觉得有帮助的话,打赏一下呗。。

需要商务合作(定制程序)的欢迎私信!!
相关文章:
qt QOffscreenSurface详解
1、概述 QOffscreenSurface 是 Qt 中用于离屏渲染的一个类。它允许在不直接与屏幕交互的情况下进行 OpenGL 渲染操作,常用于生成纹理、预渲染场景等。通过 QOffscreenSurface,可以在后台创建一个渲染表面,进行绘制操作,并将结果捕…...
基于Spring Boot的消防物资存储系统的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
深度学习算法清单
目录 1. 神经网络必备基础知识点 2. 神经网络前向传播与反向传播 3. 网络模型整体架构分析实例 4. 神经网络建模效果分析 5. 激活函数与过拟合问题解决 6. 卷积神经网络核心知识点 7. 卷积建模流程与各参数作用分析 8. 池化层的作用与效果 9. 经典卷积神经网络架构分析…...
docker ssh远程连接
目录 操作命令: 确保 SSH 配置允许 root 登录: docker提交: 操作命令: # 进入容器 docker exec -ti lbg04 /bin/bash# 更新包管理并安装 SSH 服务(Ubuntu/Debian 示例) apt-get update apt-get install…...
leetcode 20.有效括号
20. 有效的括号 - 力扣(LeetCode) class Solution:def isValid(self, s: str) -> bool:stack []for i in s :if i in ((,{,[ ):stack.append(i)elif i in () ):# 这种情况是 栈弹出元素为空时候 ,右半部分的括号多出来一些 比如&#x…...
【杂记三】Cython加速模块cython_nms未编译
一、问题 from cython_nms import nms as cnms ModuleNotFoundError: No module named cython_nms Github download 需要生成如下的 二、安装编译编译安装 cython_nms 1. 确保已经安装了 Cython conda activate your-env pip install cython2. 编译编译 cython_nms 进入编译…...
LeetCode(977):有序数组的平方
有序数组的平方 题目链接 题目:给你一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。 //暴力 #include<stdio.h> void sort(int *nums,int n){for(int i0;i<n;i)for(int ji1;j<…...
订票系统|基于Java+vue的火车票订票系统(源码+数据库+文档)
订票系统目录 基于Springbootvue的火车票订票系统 一、前言 二、系统设计 三、系统功能设计 1会员信息管理 2 车次信息管理 3订票订单管理 4留言板管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍…...
「Unity3D」使用C#获取Android虚拟键盘的高度
原理是:利用getWindowVisibleDisplayFrame方法,获取Android窗口可见区域的Rect,这个Rect剔除了状态栏与导航栏,并且在有虚拟键盘遮挡的时候,会剔除这个遮挡区域。 接着,Unity的safeArea也剔除了状态栏与导…...
近场通信(NFC)在电动车启动系统中的技术实现路径
电动车NFC一键启动系统基于13.56MHz频段实现非接触控制,技术方案要点如下: 系统架构 硬件核心 NFC芯片(如N32G45x)处理通信协议,支持手机/卡片识别STM32主控解析指令,AES-128加密模块保障双向认证…...
斜线、短横、空格,三种分隔日期的优雅解析(Python | DeepSeek)
标准日期解析操作,str.replace链式如灵蛇蜿蜒,三元表达式像空灵仙家妙法。 笔记模板由python脚本于2025-03-25 22:32:24创建,本篇笔记适合三元表达式、字符串操作修习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在…...
自动化逆向框架使用(Objection+Radare2)
1. 工具链架构与核心优势 1.1 动静结合逆向体系 graph LR A[动态分析] -->|Objection实时Hook| B[关键点定位] B --> C[行为数据捕获] D[静态分析] -->|Radare2深度解析| E[控制流重建] E --> F[漏洞模式识别] B --> F C --> F 组合优势对比&…...
inline 配置全局参数变量
在 C 中,对于头文件中定义的全局变量,使用 inline 比 static 更优,主要原因如下: 1. 避免重复定义的多个副本 static 的问题 每个包含该头文件的 .cpp 都会生成一个独立的变量副本,导致: 内存浪费…...
(C语言)静态通讯录(正式版)(C语言小项目)
1.首先是头文件: //头文件 //contact.h//防止头文件被重复包含 #pragma once //定义符号常亮,方便维护和修改 //联系人基本信息容量 #define NAME_MAX 20 #define AGE_MAX 5 #define SEX_MAX 5 #define TELE_MAX 15 #define ADDR_MAX 30 //联系人最大容量…...
Windows 计划任务服务(Task Scheduler)
svchost.exe -k netsvcs -p -s Schedule 是 Windows 计划任务服务(Task Scheduler) 的标准启动命令,通常用于管理系统定时任务。以下是详细解析: 命令拆解 svchost.exe Windows 核心进程,用于托管系统服务(…...
[特殊字符] 2025蓝桥杯备赛Day13——P10984 [蓝桥杯 2023 国 Python A] 残缺的数字
🔍 2025蓝桥杯备赛Day13——P10984 [蓝桥杯 2023 国 Python A] 残缺的数字 🚀 题目速览 题目难度:⭐⭐⭐(需掌握位运算与组合数学) 考察重点:二进制状态处理、位运算、乘法原理、枚举 P10984 [蓝桥杯 2…...
线程控制与线程库
目录 解析tid 线程的地址空间布局 线程栈 我们来学习线程控制与线程库 解析tid #include<iostream> #include<string> #include<cstdio> #include<cstring> #include<unistd.h> #include<thread> using namespace std;int shared_val…...
P1182 数列分段 Section II
P1182 数列分段 Section II - 洛谷 题目描述 对于给定的一个长度为 N 的正整数数列 A1∼AN,现要将其分成 M(M≤N)段,并要求每段连续,且每段和的最大值最小。 关于最大值最小: 例如一数列 4 2 4 5 1…...
比手动备份快 Iperius全自动加密备份,NAS/云盘/磁带机全兼容
IperiusBackupFull是一款专为服务器和工作站设计的备份解决方案,它同时也是一款针对Windows 7/8/10/11/Server系统的简洁且可靠的备份软件。该软件支持增量备份、数据同步以及驱动器镜像,确保能够实现完全的系统恢复。在备份存储方面,Iperius…...
从概率到梯度:理解分类问题中交叉熵的优越性
分类问题一般使用交叉熵(Cross-Entropy)而不是平方损失(Square Loss)函数1. **概率解释**2. **梯度性质**3. **对错误的惩罚**4. **计算复杂度**5. **总结** 分类问题一般使用交叉熵(Cross-Entropy)而不是平…...
2025最新版Ubuntu Server版本Ubuntu 24.04.2 LTS下载与安装-详细教程,细致到每一步都有说明
官网 https://ubuntu.com/ 下载 点击菜单 Prodercts> Ubuntu OS>Ubuntu Server 点击下载 下载后会有个弹窗 安装 选择第一个 install Ubuntu Server 直接默认,选择English 【默认】 选择键盘布局【默认】 选择安装配置【默认】 配置网络 我这里选择…...
更新测试环境构建命令以解决构建失败问题
本段代码解决 更新测试环境构建命令以解决构建失败问题 //本项目是reactumi3antdesign 搭建的后台管理系统 "build:test": "cross-env UMI_ENVtest NODE_OPTIONS--openssl-legacy-provider umi build"**原因:**Node.js v17 的 OpenSSL 3.0 与旧…...
C 语言中, scanf 函数在哪些情况下会结束输入读取:
在 C 语言中, scanf 函数在以下几种情况下会结束输入读取: : 1. 遇到指定格式匹配失败: scanf 按照格式字符串要求读取输入。当输入数据格式与格式字符串不匹配时,就会结束读取。例如 scanf(“%d”, &num) 要求输…...
树莓派5-GPIO和40针引脚
1.树莓派5引脚图 2.GPIO 引脚作用 (1) 电压 板上有两个 5V 引脚和两个 3.3V 引脚,以及一些不可配置的接地引脚 (0V)。其余引脚均为通用 3.3V 引 脚,这意味着输出设置为 3.3V,输入可接 3.3V。 (2) 输出 指定为输出引脚的 GPIO 引脚可设置为…...
【数据库】sql错题详解
1. 执行子查询 SELECT 供应商号 FROM 订购单 WHERE 职工号 IN (E1, E3) GROUP BY 供应商号 HAVING COUNT(DISTINCT 职工号) 2筛选职工号为 E1 或 E3 的记录: 依据 WHERE 职工号 IN (E1, E3) 这个条件,从 订购单 表中把职工号为 E1 或者 E3 的记录筛选出…...
搭建主从DNS、nfs、nginx
任务需求: 客户端通过访问 www.nihao.com 后,能够通过 dns 域名解析,访问到 nginx 服务中由 nfs 共享的首页文件,内容为:Very good, you have successfully set up the system. 各个主机能够实现时间同步,…...
C#重写treeView控件
1.先准备两张图片downdrop.png、downdrop_open.png放在项目Resources里 2.新建用户控件BaseTreeView控件 3.重写控件继承TreeView,记得删除AutoScaleMode这一行,否则会报错 public partial class BaseTreeView : TreeView {//这个属性貌似不起作用&…...
JS自动装箱(Auto-boxing)机制深度解析
📦 JS自动装箱(Auto-boxing)机制深度解析 自动装箱(Autoboxing) 是 JavaScript 的一项特性 🌟 核心概念速览 自动装箱 原始值临时变身对象 当对原始值调用方法或访问属性时,JS 引擎会自动将其转换为对应的包装对象&…...
ArcGIS 10.8.1之后发布栅格数据的MapServer 动态工作空间 替换数据源渲染问题
背景 经过测试,Server 10.8.1、11.0、11.1发布相关服务设置动态空间之后,前端都无法自动读取同名的clr色彩映射表文件进行渲染,服务都是由ArcGIS Pro进行发布。 原因 基于ArcMap发布的服务才支持,但是10.8.1之后不支持ArcMap发…...
Java集合框架深度剖析:从数据结构到实战应用
引言 Java集合框架是Java开发中的核心组件之一,其设计目标是提供高性能、高复用性的数据容器。无论是数据处理、缓存设计还是高并发场景,集合框架都扮演着关键角色。本文将从List、Map、Set三大核心接口出发,深入剖析其主流实现类࿰…...
