Qt 应用程序中指定使用桌面版本的 OpenGL或嵌入式系统OpenGL ES的 API 进行渲染
qputenv(“QT_OPENGL”, “desktop”) 是用于在 Qt 应用程序中指定使用桌面版本的 OpenGL API 进行渲染。
具体来说,qputenv 是 Qt 提供的一个环境变量设置函数,它允许开发者在程序运行时设置环境变量。在这个例子中,环境变量 QT_OPENGL 被设置为 “desktop”,这意味着 Qt 应用程序将使用桌面版本的 OpenGL API 进行渲染,而不是嵌入式系统版本(OpenGL ES)。
此外,Qt 提供了多种编译配置选项来控制使用的 OpenGL API 层次,例如 -opengl desktop、-opengl es2 和 -no-opengl。选择 -opengl desktop 会在编译时指定 Qt 库使用桌面版的 OpenGL。而 -opengl es2 则是指定使用 OpenGL ES 2.0,这通常用于嵌入式系统或移动设备。-no-angle 和 -angle 是与 OpenGL ES 2.0 的支持和兼容性相关的选项,其中 -angle 允许 Qt 通过 DirectX 的渲染 API 来进行渲染,以兼容不支持 OpenGL ES 2.0 但支持 OpenGL 1.5 或 DirectX 9.0 的设备。
需要注意的是,qputenv(“QT_OPENGL”, “desktop”) 这种设置方式是在运行时动态改变 Qt 的渲染行为,而不是在编译时通过配置选项来设定。这在某些情况下可能非常有用,比如当应用程序需要在运行时根据不同的硬件或操作系统条件选择不同的渲染方式时。不过,这种方式也需要 Qt 运行时支持动态加载和切换不同的 OpenGL 实现,这可能会受到具体 Qt 版本和配置的影响。
那有没有在嵌入式系统或移动设备的写法?
在嵌入式系统或移动设备上,通常使用的是 OpenGL ES(Embedded Systems)版本,这是为性能和资源受限的环境特别设计的 OpenGL 子集。要在 Qt 应用程序中指定使用 OpenGL ES,您可以通过设置环境变量 QT_OPENGL 为 “es2” 来告知 Qt 使用 OpenGL ES 2.0 进行渲染。
以下是在嵌入式系统或移动设备上告诉 Qt 使用 OpenGL ES 的写法:
1设置环境变量:
int main(int argc, char *argv[]) {qputenv("QT_OPENGL", "es2"); // 告诉 Qt 使用 OpenGL ES 2.0// ... 其他代码 ...
}
2编译 Qt:
在编译 Qt 时,您需要确保选择正确的配置选项以支持 OpenGL ES。例如,使用 -opengl es2 配置选项来编译 Qt,以便它使用 OpenGL ES 2.0。
3创建 Qt Quick 应用程序:
如果您使用的是 Qt Quick,可以在您的 main.cpp 文件中包含 QOpenGLContext 和 QSurfaceFormat 类来创建 OpenGL ES 上下文:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QOpenGLContext>
#include <QSurfaceFormat>int main(int argc, char *argv[]) {QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QSurfaceFormat format;format.setRenderableType(QSurfaceFormat::OpenGLES); // 设置上下文类型为 OpenGL ESQSurfaceFormat::setDefaultFormat(format);QGuiApplication app(argc, argv);QQmlApplicationEngine engine;// ... 加载和显示 QML 文件 ...return app.exec();
}
4在 QML 中使用 OpenGL ES:
在 QML 中,您可以使用 QtQuick 模块中的 Canvas 元素来绘制 OpenGL ES 图形。Canvas 元素提供了 drawRectangle、drawCircle、drawImage 等函数,这些函数都使用 OpenGL ES 进行底层渲染。
5使用 EGL:
在某些情况下,您可能需要直接使用 EGL(Embedded Systems 的本地窗口系统接口)来创建和管理 OpenGL ES 上下文。这通常涉及到使用 EGL API 函数,如 eglInitialize、eglCreateWindowSurface 等,来初始化上下文并设置渲染表面。
请注意,具体的方法可能会根据您的开发环境和目标平台有所不同。在开发嵌入式系统或移动设备的 Qt 应用程序时,建议查阅 Qt 文档和相关平台的开发指南,以确保正确设置和使用 OpenGL ES。
相关文章:
Qt 应用程序中指定使用桌面版本的 OpenGL或嵌入式系统OpenGL ES的 API 进行渲染
qputenv(“QT_OPENGL”, “desktop”) 是用于在 Qt 应用程序中指定使用桌面版本的 OpenGL API 进行渲染。 具体来说,qputenv 是 Qt 提供的一个环境变量设置函数,它允许开发者在程序运行时设置环境变量。在这个例子中,环境变量 QT_OPENGL 被设…...
大数据软件,待补充
数据采集: 实时采集: Debezuim Debezuim是构建在 Apach Kafka之上,并提供Kafka连接器来监视特定的数据库管理(采集多种数据库) Canal canal 是阿里开发,用于实时采集Mysql 当中变化的数据 maxwell,flinkX,flinkCDC 离线采集&#…...
深入探索pdfplumber:从PDF中提取信息到实际项目应用【第94篇—pdfplumbe】
深入探索pdfplumber:从PDF中提取信息到实际项目应用 在数据处理和信息提取的过程中,PDF文档是一种常见的格式。然而,要从PDF中提取信息并进行进一步的分析,我们需要使用适当的工具。本文将介绍如何使用Python库中的pdfplumber库来…...
实现linux platform tree框架下ICM20608驱动开发(SPI)
目录 概述 1 硬件接口 2 添加ICM20608的设备树信息 2.1 使用i.MX Pins Tool v6配置SPI引脚 2.2 配置设备树 2.3 编译.dts 2.4 在板卡中更新设备树 3 编写驱动程序 3.1 创建设备匹配表 3.2 重要函数介绍 3.2.1 初始化函数 3.2.2 写寄存器函数 3.2.3 读寄存器函数 …...
在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
文章目录 一、XSS攻击1、反射型XSS攻击原理2、DOM型XSS攻击原理3、存储型XSS攻击原理 防范措施 二、CSRF攻击攻击原理:防范措施: 三、点击劫持攻击原理:防范措施: 四、项目中如何预防安全问题 随着互联网的发展,Web应用…...
年关将至送大礼 社区适时献爱心
在这个快节奏的时代,社区作为人们生活的重要组成部分,其凝聚力和互助精神显得尤为重要。2024年2月7日,实践队员李若钰有幸参与了社区礼盒分装的活动,这不仅仅是一次简单的劳动,更是一次心灵的洗礼和感悟。 礼盒分装&am…...
singularity容器的技术基础
Singularity容器技术是专为科学计算、数据密集型工作和高性能计算(HPC)环境设计的。与其他容器技术如Docker相比,Singularity提供了一些独特的特性和设计考虑,使其在科学和研究社区中受到欢迎。以下是Singularity容器技术的一些关…...
jax可微分编程的笔记(2)
jax可微分编程的笔记(2) 第2章 自动微分 自动微分和符号求导有诸多的相似之处:它们同样依赖于计算图 的构建,同样依赖于求导的递归实现。从某种意义上来说,它们 甚至有完全相同的数据结构。不过,二者的区…...
在Linux服务器上部署一个单机项目
目录 一、jdk安装 二、tomcat安装 三、MySQL安装 四、部署项目 一、jdk安装 1. 上传jdk安装包 jdk-8u151-linux-x64.tar.gz 进入opt目录,将安装包拖进去 2. 解压安装包 这里需要解压到usr/local目录下,在这里我新建一个文件夹保存解压后的文件 [r…...
HTTP概要
文章目录 什么是HTTP?URL的结构请求报文结构请求方法GETHEADPOSTPUTDELETETRACEOPTIONSCONNECTPATCH解释 请求头字段 响应报文结构响应状态响应头字段 HTTP会话3次握手无状态协议 什么是HTTP? HTTP,即Hypertext Transfer Protocol(超文本传输协议) 它是一个”请…...
128 Linux 系统编程6 ,C++程序在linux 上的调试,GDB调试
今天来整理 GDB 调试。 在windows 上我们使用vs2017开发,可以手动的加断点,debug。 那么在linux上怎么加断点,debug呢?这就是今天要整理的GDB调试工具了。 那么有些同学可能会想到:我们在windows上开发,…...
vue2的ElementUI的form表单报错“Error: [ElementForm]unpected width”修复
1. 问题 ElementUI的form表单,当动态切换显示表单时报错 Error: [ElementForm]unpected width。 翻译过来就是form表单的label宽度width出了问题。 2. 分析 参数说明类型可选值默认值label-width表单域标签的宽度,例如 ‘50px’。作为 Form 直接子元…...
Linux 网络命令指南
目录 配置IP地址和子网掩码 网络接口的详细信息 测试与目标主机的连通性 下载文件或内容 远程登录,进行远程管理和协作 CentOS / Red Hat(使用 firewalld) 关闭防火墙 开启防火墙 配置TCP端口(假设使用3306端口ÿ…...
vue3组件间的通信,通过props,emit,provide和inject把数据传递N个层级,expose和ref实现父组件调用子组件方法
文章目录 一、父组件数据传递N个层级的子组件vue3 provide 与 injectA组件名称 app.vueB组件名称 provideB.vueC组件名称 provideCSetup.vue 二、使用v-model指令实现父子组件的双向绑定父组件名称 app.vue子组件名称 v-modelSetup.vue 三、父组件props向子组件传值子组件 prop…...
开源免费的NTFS for mac工具mounty
开源免费的NTFS for mac工具mounty 安装依赖 brew install gromgit/fuse/ntfs-3g-macbrew install --cask macfuse安装mounty 如果已经安装macFUSE和ntfs-3g-mac,可以直接点击下载的dmg安装包,安装升级。第一次启动mounty,你需要接受一系列…...
Sora-OpenAI 的 Text-to-Video 模型:制作逼真的 60s 视频片段
OpenAI 推出的人工智能功能曾经只存在于科幻小说中。 2022年,Openai 发布了 ChatGPT,展示了先进的语言模型如何实现自然对话。 随后,DALL-E 问世,它利用文字提示生成令人惊叹的合成图像。 现在,他们又推出了 Text-t…...
4 buuctf解题
[CISCN 2019 初赛]Love Math1 打开题目 题目源码 <?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("…...
Jmeter基础(3) 发起一次请求
目录 Jmeter 一次请求添加线程组添加HTTP请求添加监听器 Jmeter 一次请求 用Jmeter进行一次请求的过程,需要几个步骤呢? 1、添加线程组2、添加HTTP请求3、添加监听器,查看结果树 现在就打开jmeter看下如何创建一个请求吧 添加线程组 用来…...
视频怎么变成gif动图?一招教你在线转换
MP4是一种常见的视频文件格式,它可以包含音频和视频数据,并支持高质量的视频压缩。MP4视频可以呈现连续的动态效果,可以包含平滑的运动、音频等多媒体元素。而GIF动图是由一系列静态图像组成的,通过快速连续播放这些帧来创造出动态…...
Leetcode2583. 二叉树中的第 K 大层和
Every day a Leetcode 题目来源:2583. 二叉树中的第 K 大层和 解法1:层序遍历 排序 先使用层序遍历计算出树的每一层的节点值的和,保存在数组 levelSum 中。然后将数组进行排序,返回第 k 大的值。需要考虑数组长度小于 k 的边…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...
6.9本日总结
一、英语 复习默写list11list18,订正07年第3篇阅读 二、数学 学习线代第一讲,写15讲课后题 三、408 学习计组第二章,写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语:复习l默写sit12list17&#…...
今日行情明日机会——20250609
上证指数放量上涨,接近3400点,个股涨多跌少。 深证放量上涨,但有个小上影线,相对上证走势更弱。 2025年6月9日涨停股主要行业方向分析(基于最新图片数据) 1. 医药(11家涨停) 代表标…...
SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈
【导读】 本文针对无人机(UAV)视频中目标尺寸小、运动快导致的多目标跟踪难题,提出一种更简单高效的方法。核心创新在于从低置信度检测启动跟踪(贴合无人机场景特性),并改进传统外观匹配算法以关联此类检测…...
如何优雅地绕过限制调用海外AI-API?反向代理与API中转技术详解
阅读时长 | 8分钟 适用读者 | 需要跨境调用OpenAI等AI服务的开发者/企业 一、问题背景:为什么需要代理? 最近在技术社区看到这样的求助: "公司服务器在国内,但业务需要调用OpenAI接口,直接访…...
Unity VR/MR开发-开发环境准备
视频讲解链接: 【XR马斯维】UnityVR/MR开发环境准备【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
