Qt for MCUs 2.7正式发布
本文翻译自:Qt for MCUs 2.7 released
原文作者:Qt Group高级产品经理Yoann Lopes
翻译:Macsen Wang
Qt for MCUs的新版本已发布,为Qt Quick Ultralite引擎带来了新功能,增加了更多MCU平台的支持,并且我们对GUI框架进行了多项改进,以适应资源受限的嵌入式系统。
您可以在变更日志中找到此版本的完整变更列表。接下来,我们将介绍此版本的亮点。
更便捷的2D形状处理
我们添加了新的QML API到Qt Quick Ultralite,这些API从传统Qt中进行了适配,并可直接兼容,以简化在应用程序中实现两种常见UI元素(弧形和渐变)的过程。
ArcItem
为了在Qt for MCUs应用程序中绘制弧形,Qt Quick Ultralite已经拥有了来自Shapes模块的PathArc QML类型,它提供了一种灵活且通用的方式来实现任何类型的椭圆弧,但是在只需要绘制两个角度(起始和结束)之间的圆弧时,缺乏便利性。新的ArcItem类型从Qt Design Studio适用于传统Qt的组件进行了调整,满足了这一需求,并提供了一种快速实现诸如仪表或圆形进度指示器等UI组件的方法。
您可以自行查看并尝试新的studio_components示例以了解如何使用它。
渐变
在此版本之前,Qt for MCUs中添加渐变的主要选项要么是将渐变预先渲染为图像,要么是使用PaintedItem进行基于自定义C++绘制的实现。为了提供更多便利性和灵活性,我们将传统Qt Quick中的Gradient类型适配到Qt Quick Ultralite中可用。它可以用于填充Rectangle、Shape和ArcItem,使用任意数量的颜色停止点进行线性渐变。
现有的shapes示例和watch demo已经更新,演示了如何使用这种新类型。
集成任意格式的资源
我们增加了对自定义图像格式支持,以提高使用的灵活性。到目前为止,Qt Quick Ultralite资源编译器在进行编译时预处理图像时,解码并在需要的时候重新进行压缩。这导致用户无法启用自定义格式的图像的即时解码(例如,在运行时从远程服务器下载的图像)或某些格式可能在特定MCU上具有硬件加速(例如JPEG解码)。为了克服这个限制,我们添加了一个新的ImageDecoder API,用于注册自定义图像格式和匹配解码器。这使得可以在应用程序中包含自定义解码器接口(硬件或软件),并利用硬件提供的特有的解码能力,或使用特定用途的图像格式。
您可以在相关指南中阅读有关集成新图像格式所需步骤的更多信息。
即时JPEG解码
作为新的ImageDecoder API的示例实现,我们添加了对某些STM32硬件平台上可用的硬件加速JPEG解码器的支持。该实现演示了如何将JPEG解码器注册为自定义格式,并为其提供了硬件解码接口。在支持的STM32平台上使用这种方法可以节省大量的用于存储的非易失性存储器资源,并避免在运行时解压缩它们时所造成的性能开销。这对于由许多必须存储在flash中并按需解码的帧组成的复杂动画特别有帮助(例如启动动画、视频或类似GIF的动画)。
我们已更新我们的Sprite_Animation示例,以利用支持的STM32 F7和H7平台上的HW JPEG解码器。
轻松针对不同的显示方向旋转GUI(技术预览版)
我们添加了一个新的项目属性,可以在几乎没有运行时性能损耗的情况下轻松对GUI内容应用静态旋转。
当设备的显示不处于其自然方向时,这个功能可以提供极大的便利,例如在纵向显示面板(例如480x800)上显示横向UI(例如800x480)。这中情况可能是基于多个显示屏之间的成本考虑、组装限制或其他各种原因导致的。在这种情况下,除非显示屏控制器能够直接处理所需的旋转,否则您需要根据设置将GUI内容旋转90度、180度或270度。
现有的一些解决方案包括对GUI应用运行时旋转,这可能会显著降低大多数MCU的应用帧率,或者设计具有内置旋转的布局和资源,以避免运行时性能损失,但这意味着工作流程非常繁琐。我们设计的解决方案既简单——只需设置一个项目属性,无需更改QML代码或GUI资源——又高效,同时可以避免运行时的性能损失。
这个功能在Qt for MCUs 2.7中作为技术预览版发布,并计划在Qt for MCUs 2.8 LTS中升级为稳定版。虽然在下一个版本中不希望更改API,但当前版本存在一些限制,尚未实现所有优化,这意味着在该版本中应用旋转可能会对帧率和CPU使用率产生影响。
您可以在配置显示旋转文档页面上获取更多关于此功能的信息。
新设备的支持
作为这个版本的一部分,我们已经添加了一些新的MCU供您尝试!
- Renesas RA系列的新旗舰MCU——基于Cortex M85的RA8D1——现在作为Tier-2技术预览平台启用。稳定版本会在即将发布的版本中推出。
- 适用于可穿戴设备的超低功耗MCU Ambiq Apollo4 Plus(带显示屏扩展板)现在作为Tier-3平台推出。
- Infineon TRAVEO™ T2G CYT4EN是一款提供MPU级性能和图形能力的MCU,支持高分辨率显示,最高可达2880 x 1080,现在作为Tier-2技术预览平台可用。
更多内容
我们不断努力使Qt Quick Ultralite尽可能轻量。在之前的版本中,我们已经发布了相关的优化措施,进一步优化了从QML生成的C++代码,使大多数应用的.text节的大小减少了3%~7%。
改进了FreeRTOS多任务示例,以演示多个线程之间的双向通信,更加贴近实际使用场景。这使得在Qt Quick Ultralite和后端线程之间的数据同步更加容易。
在Qt Design Studio 4.4中进行了许多提升,重点是提供一个仅限于Qt for MCUs可用功能的GUI设计环境,以防止误生成仅对传统Qt有效的QML代码。
当为qmlproject属性分配的值无效时,改进了qmlprojectexporter工具的错误报告。
后续计划
Qt for MCU 2.8 长周期支持版(LTS) 将于 2024 年 5 月底发布。您可以一如既往地期待一系列新功能和改进,从而更快地创建用于 MCU 的高级图形用户界面。在下一版本中,我们计划包含的一些亮点如下:
- 为了极大地简化创建可调整大小的用户界面的流程,我们为Qt Quick Ultralite提供了Qt Quick Layouts的子集。
- 新增了TextInput QML类型
- 这是一个功能齐全的虚拟键盘,具有与智能手机上一致的用户体验。
- 支持CMSIS-packs,方便将Qt for MCUs与第三方嵌入式IDE项目进行集成。
- 支持Zephyr RTOS和构建系统。
这还不是全部,我们计划在今年和以后进行更多开发,旨在提高您的生产力,并将嵌入式处理器的上所能实现的效果推向极限。请持续关注更多更新。
相关文章:

Qt for MCUs 2.7正式发布
本文翻译自:Qt for MCUs 2.7 released 原文作者:Qt Group高级产品经理Yoann Lopes 翻译:Macsen Wang Qt for MCUs的新版本已发布,为Qt Quick Ultralite引擎带来了新功能,增加了更多MCU平台的支持,并且我们…...

共享IP和独享IP如何选择,两者有何区别?
有跨境用户在选择共享IP和独享IP时会有疑问,不知道该如何进行选择,共享IP和独享IP各有其特点和应用场景,选择哪种方式主要取决于具体需求和预算。以下是对两者的详细比较: 首先两者的主要区别在于使用方式和安全性:共…...
文心一言VSchatGPT4
文心一言和GPT-4各有优势,具体表现在不同的测试场景下。 在某些测试场景中心一言的表现优于GPT-4,例如在故事的完整度和情节吸引力方面,文心一言表现得更加符合指令,情节更吸引人。这可能得益于其模型在训练时对中文语境的深入理…...

Linux 目录结构与基础查看命令
介绍 目录结构如下 /bin:存放着用户最经常使用的二进制可执行命令,如cp、ls、cat等。这些命令是系统管理员和普通用户进行日常操作所必需的。 /boot:存放启动系统使用的一些核心文件,如引导加载器(bootstrap loader…...

【matlab】如何解决打开缓慢问题(如何让matlab在十几秒内打开)
【matlab】如何解决打开缓慢问题(如何让matlab在十几秒内打开) 找到我们解压缩时Crack中的license_standalone.lic文件,将其拷贝 在安装matlab的路径下新建一个文件,粘贴上面的license_standalone.lic文件 在桌面鼠标移动到matl…...
【stata】求滚动波动情况
0.计算对象 计算 t t t、 t 1 t1 t1、 t 2 t2 t2 这三起滚动波动情况 V o l i , t l n ( ∑ n t n t 2 ( g n − g ˉ ) 2 3 ) Vol_{i,t} ln(\sqrt{\frac{\sum_{nt}^{nt2}(g_{n}-\bar{g})^2}{3}}) Voli,tln(3∑ntnt2(gn−gˉ)2 ) e . g e.g e.g: 假设 200…...

The C programming language (second edition,KR) exercise(CHAPTER 2)
E x c e r c i s e 2 − 1 Excercise\quad 2-1 Excercise2−1:输出结果如图1和图2所示,这道练习题需要文章1和文章2的知识。 #include <stdio.h> #include <limits.h>float getFloat(char sign, unsigned char exp, unsigned mantissa); do…...
rust实现循环链表
作为一个计算机技术专家,针对你的问题,我将首先解释如何使用Rust语言实现循环链表,并提供相应的代码示例。然后,我将解释一个可能的报错问题及其解决方法。 循环链表的实现 在Rust中实现循环链表,首先需要定义链表节…...

2. Spring的创建和Bean的存取
经过前面的学习我们已经大体明白了 IOC 思想以及它的实现方式 DI ,本节要讲的是如何Spring框架实现实现DI。 本节目标: Spring(Core) 项目创建将对象存储到 Spring 中将对象(bean)从 Spring 中取出 1. 创建 Spring 项目 与开篇演示的 Spring Boot 项目不…...

策略模式【行为模式C++】
1.概述 策略模式是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。 策略模式通常应用于需要多种算法进行操作的场景,如排序、搜索、数据压缩等。在这些情况下&#x…...
php中session相关知识(目前了解部分)
#记录学习知识 一.ini_set() 在PHP中,ini_set() 函数用于在脚本运行时设置指定的配置选项的值。这些配置选项可以是PHP的核心设置,例如文件上传的最大大小、脚本的最大执行时间、错误报告级别等。使用 ini_set() 可以临时改变PHP.ini文件中的设置&am…...
从零实现诗词GPT大模型:GPT是怎么生成内容的?
专栏规划: https://qibin.blog.csdn.net/article/details/137728228 再开始编写GPT之前,我们得对GPT是怎么生成内容的有一个大致的了解。目前的神经网络我们大多都可以看成是一个黑盒,即我们把数据输送给网络后,网络给我我们输出,我们可以不用关心这个黑盒里到底是怎么实现…...

8路HDMI+8路AV高清视频流媒体编码器JR-3218HD
产品简介: JR-3218HD高清音视频编码产品支持8路高清HDMI音视频采集功能,8路AV视频采集功能,8路3.5MM独独立音频接口采集功能。编码输出双码流H.264格式,音频MP3/AAC格式。编码码率可调,画面质量可控制。支持HTTP/RTSP…...

LangChain入门:14.LLMChain:最简单的链的使用
摘要 本文将介绍LangChain库中LLMChain工具的使用方法。LLMChain将提示模板、语言模型(LLM)和输出解析器整合在一起,形成一个连贯的处理链,简化了与语言模型的交互过程。我们将探讨LLMChain的技术特点、应用场景以及它解决的问题…...

深入理解k8s kube-proxy
1、概述 我觉得只要大家知道kube-proxy是用来配置网络规则的而不是转发流量的,真正的流量由iptables/ipvs来转发就可以了。 网络是k8s的一个关键部分。理解k8s中网络组件如何工作可以帮助更好的设计和配置我们的应用。 kube-proxy就是K8s网络的核心组件。它把我们…...

Spark-机器学习(1)什么是机器学习与MLlib算法库的认识
从这一系列开始,我会带着大家一起了解我们的机器学习,了解我们spark机器学习中的MLIib算法库,知道它大概的模型,熟悉并认识它。同时,本篇文章为个人spark免费专栏的系列文章,有兴趣的可以收藏关注一下&…...
java的正则表达式校验,包含了中国几乎所有运营商手机号码的校验格式
时间2024年4月14日22:25:00 代码 String PHONE_REGEX "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";解释 这个Java代码段定义了一个常量 PHONE_REGEX,它包含了一个正则表达式,用于匹配中国大陆的手机号码。下面是对这…...

C#简单工厂模式的实现
using System.Diagnostics.Metrics; using System.Runtime.InteropServices; using static 手写工厂模式.Program;namespace 手写工厂模式 {internal class Program{public interface eats {void eat();}//定义了一个接口public class rice : eats{public void eat() {Console.…...
.NET 设计模式—观察者模式(Observer Pattern)
简介 在.NET中,观察者模式是一种设计模式,它允许对象之间进行一对多的依赖关系。当一个对象的状态发生变化时,所有依赖于它的对象都会收到通知并自动更新。这种模式在事件驱动的设计中非常常见。 在.NET中实现观察者模式,通常涉…...

EasyUI Jquery 学习笔记 ——DataGrid(数据网格)与 Tree(树)详细版
1. DataGrid(数据网格)与 Tree(树) 1.1 Datagrid 数据网格 扩展自 $.fn.panel.defaults。通过 $.fn.datagrid.defaults 重写默认的 defaults。 数据网格(datagrid)以表格格式显示数据,并为选择、排序、分组和编辑数据提供了丰富的支持。数据网格(datagrid)的设计目…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...