各种UI库使用总结
各种UI库使用总结
工作了这么年,使用了一些UI库,简单的总结一下,UI库也是五花八门,根据自己的产品,应用场景吧,没有绝对合适的,各有各的应用场景吧!
QT
这几年前后在一些嵌入式上使用过QT来做为开发,有带UI及不带UI界面的!版本的基本用的QT5.5, QT5.9这些,在嵌入式上这些版本应用都不差不多,用的功能不会比较特殊!
性能
性能上关注了一下CPU占用率上,在Hi3536C上测试了一下,使用QT linux framebuffer的方式,在刷新UI时,CPU占用率会达到10%~20%左右,还是占用率很高的!同新的应用的刷新场景使用了LVGL,LVGL只占用3%左右!这个应该同QT的linux fb中实现的方式有关,看其中的实现,QT是很暴力的把一整屏内容更新的!
这个要看芯片厂家的支持上,如果芯片厂家通过一些手段优化了,比如硬件加速方面!
内存
内存占用上与其他的UI比起来也会高出不少,不过直接用QT的场景,好像板上内存都挺足的情况下!库的空间占用也比较高!在一些flash很紧张的产品上应该也不太适用,如只有8MB,16MB的这样的空间上。
开发体验
这种"全家桶"系的解决方案,在开发上还是很方便的,QT在C++上的库的支持也是很全面、很方便,开发过几年的c、c++的朋友,如果是开发那种数据业务多的场景,如果自己要用过JAVA,C#,python,js这些开发人员来说,感觉工作一个就是在天上,一个就是在十八层以下!
不过有了QT库就不同了,在操作数据库、文件、像JSON、XML这些,感觉就是信手拈来,效率杆杆的!各种库API使用方式,基本风格方式也是一致,你招个新人也能很快的上手,这种"全家桶"在各种场景上保持一致,开发了一个产品后,再搞其他的产品基本90%的代码就是ctrl+C,ctrl+v了!内存管理上也提供了很大的支持!
这几年下来用他开发了一些停车场管理系统(以前是在PC上的)、人脸识别产品(平板类),不管在是开发和维护上都很方便!这些都是用在有数据库(MYSQL, SQLITE)交互,内存大(512MB, 1GB),Flash空间大(nand, EMMC)的场景,如果产品是用在工业控制类的场景应该考虑的方式即不一样了!
在QT用在这些产品上时,也应该考虑UI刷新率的问题,在嵌入式产品上一般是没有GPU的,像NVR,DVR上,输出分辨率基本又高,这时情况下UI的刷新率就不太高了,记得在Hi3536C上开发一款管理系统UI时,输出HDMI,VGA这样的显示,分辨率有的接1080P,2K显示,开始用的QT的Linuxfb上,刷新就感觉明显迟顿,最后花了好大的劲才把DirectUI来做为QT的底层绘图,虽然QT里加了对这个的支持,但使用中发现各种问题,还是做了很多修改才解决的!
不过现在的ARM嵌入式片子上,现在很多有GPU了,很多都4核CPU,内存配置也足,QT加上wayland方式,也是刷新很快了,最近使用的RK3568,刷新上就没有什么问题!
DirectUI
性能
没有直接用这个UI来做开发,就是之前在QT时,遇到刷新性能问题时,使用了它,这个UI也是比较老了,更新的东西不多,UI控件基本没有,很底层的一个UI,不过刷新效率很高,窗体管理的方式也很特别!控件扩展性感觉不太好操作!
内存
内存占用上很低
开发体验
使用的版本是1.7.x 没有直接使用开发UI界面产品,不太好说,窗体管理方式比较特别,代码不太好调试,控件扩展性感觉不太好操作!
SDL
这个产品上没有用过,用来开发游戏应用,或用来作为底层应该比较合适!
UCGUI
性能
性能上这个UI表现也很不错,不过没有一些统计数据了!
内存
不管是在内存占用上,还是空间大小上都有很大的可操作空间,可以在各种嵌入式产品上使用!
开发体验
从UI底层、到UI库的各种控件、窗体、字体、应用上都可以很方便的控制,这样可以比较容易实现UI库本身没有的功能,如UI的绘制、特殊的控件!
这个在在2012年左在开发一款NVR产品用过的了,版本在3.9.x上,记得是在早期海思Hi3515,Hi3520上,这个UI并不是开源的。这个UI库之前用的人还是很多,现在发现也还有很多人在用这个库来做产品!也是自己最开始学习一些UI技术入门的一个库,通过他了解了UI的实现原理,区域、窗体绘制管理、字体实现、控件等技巧。
不过这个库不是开源的,也是有版权风险存在的!由于是很早的版本了,与现代流行的UI风格、操作方式还是有很多的不同了,如果是用在工业控制显示上、交互操作体验要求不高的地方,还是比较合适,但如果用在现代一些消费类电子、用户交互要求高的场景,就感觉比较落伍,控件风格有种win98的那种感觉!如果自己要实现当前流行的风格花的力气就大了!
MiniGUI
性能
很早之前编译试用过一段时间,性能表现感觉一般,不太好说!
内存
从其控件,内存管理上都与UICGUI应该是比较类似的方式,不过代码风格上又完全不同,很像Windows下的MFC方式!
开发体验
其他我是比较反感Windows下的MFC方式的!没有怎么用,所以不太好说!
LVGL
性能
在不使用图片、只是纯绘制类的控件上,应该非常高效了
内存
单片机上都可以跑,你觉得呢?
开发体验
很现代,很流行的风格,这是上手后,UI跑起来后的第一感觉!从低层与控件,到应用都自己可控,感觉很爽,要实现现代流行的UI,又不需要去怎么定制,所以比较喜欢这货,这家伙又从单片机、SOC各种场景都能搞!
上手难度的话,也不大,就是要一点时间熟悉他的各种操作!不过文档很丰富,很完整!
在控件支持上也大部分都有吧,字体支持、图片支持还需要自己处理一些,在一些基他方面可能也需要自己处理一下,像鼠标输入,触摸等!
现在在用他试着用一个NVR,DVR界面,地址:https://gitee.com/jhting/pupanvr.git
相关文章:
各种UI库使用总结
各种UI库使用总结 工作了这么年,使用了一些UI库,简单的总结一下,UI库也是五花八门,根据自己的产品,应用场景吧,没有绝对合适的,各有各的应用场景吧! QT 这几年前后在一些嵌入式上…...

2023Web前端开发面试手册
HTML基础 1. HTML 文件中的 DOCTYPE 是什么作用? HTML超文本标记语言: 是一个标记语言, 就有对应的语法标准 DOCTYPE 即 Document Type,网页文件的文档类型标准。 主要作用是告诉浏览器的解析器要使用哪种 HTML规范 或 XHTML规范…...

一文了解数据科学Notebook
编者按: 主要介绍什么是Notebook,Notebook在数据科学领域的应用的重要性与优势,以及数据科学家/算法团队在选择Notebook时需考虑哪些关键因素。同时,基于Notebook的筛选考量维度,对常见的Notebook进初步对比分析&#…...

2020年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
C/C++编程(1~8级)全部真题・点这里 第1题:数组指定部分逆序重放 将一个数组中的前k项按逆序重新存放。例如,将数组8,6,5,4,1前3项逆序重放得到5,6,8,4,1。 时间限制:1000 内存限制:65536 输入 输入为两行: 第一行两个整数,以空格分隔,分别为数组元素的个数n(1 < n…...

关于ChatGPT的个人的一些观点
问题 1 Q: 你认为ChatGPT是一款非常有用的工具吗? A: 我认为ChatGPT是一款非常有用的工具。它可以帮助人们解决各种问题,包括技术问题、心理问题、生活问题等等。同时,ChatGPT也可以成为人们分享想法和交流的平台,增强人与人之间…...

Solidity 小白教程:13. 继承
Solidity 小白教程:13. 继承 这一讲,我们介绍solidity中的继承(inheritance),包括简单继承,多重继承,以及修饰器(modifier)和构造函数(constructorÿ…...

队列(Queue)的顶级理解
目录 1.队列(Queue) 的概念 2.单链表模拟实现队列 2.1创建队列 2.2入队列 2.3判断是否为空 2.4出队列 2.5获取队头元素 2.6完整代码: 2.7双向链表模拟实现队列代码 3.数组模拟实现队列代码 3.1创建队列 3.2判断是否为满 3.3检查是否为空 3.4插入元素 3…...

选择 Guava EventBus 还是 Spring Framework ApplicationEvent
文章首发地址 Spring Framework ApplicationEvent Spring Framework 的 ApplicationEvent 是 Spring 框架提供的一种事件机制,用于实现发布和订阅事件的功能。它基于观察者模式,允许应用程序内的组件之间进行松耦合的通信。 下面是关于 Spring Frame…...

Linux下go环境安装、环境配置并执行第一个go程序
一、安装 1.Golang对Linux的内核版本要求 GO对Linux内核版本最低要求是 2.6.23,对应要求操作系统版本是: RHEL 6.0CentOS 6.0即,不支持 (RHEL 和 CentOS) 的 (4.x or 5.x)。2.下载golang的代码版本 Golang的官网下载地址:https:…...
自定义Dynamics 365实施和发布业务解决方案 - 5. 高级自定义
本章的目的是探索可应用于Dynamics365的高级自定义。这包括使用插件和自定义工作流活动实现复杂的业务流程。此外,您还将了解如何使用SPKL任务运行器来部署这些,这在第2章中进行了讨论。最后,您还将看到使用Web API查询数据。 准备工作 若要从高级自定义开始,必须首先创建…...

软件测试下的AI之路(2)
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…...
前端面试的话术集锦第 7 篇:高频考点(浏览器渲染原理 安全防范)
这是记录前端面试的话术集锦第七篇博文——高频考点(浏览器渲染原理 & 安全防范),我会不断更新该博文。❗❗❗ 1. 浏览器渲染原理 注意:该章节都是⼀个⾯试题。 1.1 渲染过程 1.1.1 浏览器接收到HTML⽂件并转换为DOM树 当我们打开⼀个⽹⻚时,浏览器都会去请求对应的…...

打印剪刀手“耶”(V形)
用给定单个字符和首行宽度(奇数), 打印首行宽度为给定奇数“V”字形状)。 (本笔记适合Py 推崇的插件字符串格式化的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全…...
eNSP基本命令大全
单交换机VLAN划分 进入系统视图 system 进入系统视图 system-view 退到系统视图 quit 删除vlan 20 undo vlan 20 交换机命名 sysname 显示vlan disp vlan 创建vlan(也可进入vlan 20) vlan 20 把端口1-5放入VLAN 20 中 port e1/0/1 to e1/0/5 显示vlan里的端口20 disp v…...

java并发编程 ConcurrentLinkedQueue详解
文章目录 1 ConcurrentLinkedQueue是什么2 核心属性详解3 核心方法详解3.1 add(E e)3.2 offer(E e)3.3 poll()3.4 size()3.5 并发情况分析 4 总结 1 ConcurrentLinkedQueue是什么 ConcurrentLinkedQueue是一个无界的并发队列,和LinkedBlockingQueue相比,…...

msvcp110.dll是什么意思与msvcp110.dll丢失的解决方法
电脑突然提示msvcp110.dll丢失,无法执行此代码。导致软件无法打开运行,这个怎么办呢?我在网上找了一天的资料,终于把这个问题彻底处理好,也弄清楚了msvcp110.dll丢失的原因及msvcp110.dll丢失修复方法?现在…...

八)Stable Diffussion使用教程:MultiDiffusion
multidiffusion,它可以实现图片从 512 像素到 2K、4K 甚至 6K 画质的飞跃。 插件安装步骤: 1)选择扩展 2)选择可用,点击加载按钮 3)找到multidiffusion,点击右侧安装按钮 安装插件后可以在文生图和图生图的出图参数中看到多了两个区域,其实这个插件是由两部分组成的,…...
java通过钉钉机器人发消息
钉钉自定义机器人使用 加签的配置 发送消息 注意:内部群才可以创建自定义机器人 钉钉网址-自定义机器人创建 1、获得的钉钉配置信息workhook和secret //url路径private String URL "https://oapi.dingtalk.com/robot/send?access_token08ebaa04f98f7faacb…...
Git工具本地管理总结
一、本地仓库创建 https://blog.csdn.net/heshuangzong/article/details/125882372 https://blog.csdn.net/l7077/article/details/130270914 在本地创建/home/test目录,作为本地仓库目录。 $ mkdir /home/test $ cd /home/test 初始化本地的git 仓库。 $ git init Initial…...
单片机C语言实例:13、看门狗
一、看门狗溢出测试 程序实例1: #include<reg52.h>sfr WDTRST 0xA6; sbit key P3^1; /*------------------------------------------------喂狗 ------------------------------------------------*/ void Rst_Watchdog( void ) {WDTRST 0x1E…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...