各种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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
特别感谢:山野 俊俊 小色 爱琴 Stone 黑月群测试帮助 乐源(参看了乐源MICROSKIN代码和思路) kyozy(封装的GDI+模块) 等、、、 2012.12.28.00:更新内容较多,请到官方下载! 2012.08.21.00: [+]增加宏函数Init_SUITypedf_AniImage 初始化SUITypedf_AniImage类型 [+]公开SUIWinOS()函数 用来获取当前系统 Win8识别由小色添加 [+]SUI_MsgBox()中增加信息框声音 [+]SUI_MsgBox()支持ctrl+c 可复制信息框内容 [+]SUI_Window.Ptr()增加lpSUI参数 回调子程序请参考SUI_Window.PtrSUICallBackDemo() 相当于子类化此窗口 [-]修改Metro风格下编辑框点燃状态的素材 [-]修正SUI_Window.AddEdit()中使用#SUI_EditType_PassWord样式时文本“”时创建Edit失败的Bug [-]修正当载入新窗口后关闭新窗口主窗口焦点丢失Bug,对hWnd合法性未检查 感谢[寥寥十七画。]提供此Bug [-]修正SUI_Window.Flash()刷新窗口可能存在的Bug [-]修正Win7下窗口为不可调时显示界面异常的Bug [-]修正Edit滑动外框时如果Progress滚动/光晕或有AniImage导致闪烁的绘制不全面问题 [-]修改所有例程到最新引擎 2012.08.20.00: [+]增加例程 SUIDemo(简单登陆框架)(BabyCrackMe界面).e SUIDemo(动画按钮例程).e [+]增加AniImage控件 可以作为动画框或动画按钮 SUI_Window.AddAniImage() SUI_Window.Control_AniImage() 来创建和控制AniImage [+]增加AniImage控件 #SUI_CallBack_AniImage_ 回调背景绘制处理事件 [+]SUI_Window.AddCheckBox()中增加bShadow参数 可设置CheckBox文本是否有阴影 [+]SUI_Window.AddEdit()中增加pImage bImageSize参数 用法与SUI_Window.AddButton()相同 [+]SUI_Window.Ptr()增加lpKeyDown lpKeyUp参数 回调参数等同于#WM_KEYDOWN #WM_KEYUP [+]SUI_Window.Data_Int()增加 #SUI_Member_Left #SUI_Member_Top #SUI_Member_Width #SUI_Member_Height 用来消息响应区域矩形 [+]SUI_Window.Control_Edit()增加pImage参数,可修改Edit图标 [+]公开SUIMeasureText()函数 用以测量测量文本矩形 [+]公开SUIDrawpGraphicText()函数 与SUIDrawGraphicText()不同的是它需要传入Graphic指针 [+]公开SUIDrawAniImageBkg()函数 用于绘制某按下背景 [+]公开P_SUITypedf_AniImage()函数 获取SUITypedf_AniImage指针 [-]修正SUI_Window.AddButton()中bImageSize参数自动识别计算图像失败的Bug [-]修正SUI_Window.Control_Image()中pHoverImage修改失效的Bug [-]修正Edit #SUI_EditType_PassWord样式下若选中全部密码再输入会导致乱码的Bug [-]修正部分情况下Edit提示音错误的Bug [+]修改所有例程支持最新版本引擎
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值