开源项目预告Demo演示:应用极其简单的多级GUI库

news2024/11/15 5:00:45

    之前在做项目的时候,需要用到多级GUI,当时使用的是用数组穷举列出来各个界面的方式(也有人管它叫索引法),缺点也是很多的,比如开发繁琐,维护不便,难以添加过渡动画,各个界面是定死的,扩展性不强……并且从严格意义上而言,这个方式只能算作实现多级菜单的伪GUI,而像emWin,LVGL等又太复杂占用太大,并且对各个界面的管理不是很方便,所以就有了开发一个优雅好用的跨平台GUI框架的念头,现在已经基本完成,还剩一些小细节和注释就可以开源出来,下面简单介绍一下

一,设计目标:

        实现动态创建,删除菜单项(即通过封装好的函数实时操作菜单项),添加过渡动画,控制资源占用,无限制的菜单扩展,支持实时添加菜单项,便于移植到各种平台

二,设计思路:

        一提到无限级扩展,我第一个想到的是用链表,所以我定义了三个结构体,分别负责菜单,应用,按键。为了避免错误的关系处理导致GUI进入死循环,我将其封装成了函数,可以自动处理关系,并定义了一个 ROOT项,这样可以避免错误的操作并简化主程序中的操作

        对于菜单结构体,里面包含了菜单名称、父目录、子目录链表的首位、前级、后级、应用链表的首位,用一个图来展示:

        然后就是设计过渡动画了,对于每个子目录项的选择,我使用了PID动画,对于页之间的过渡,我使用了虚化效果,在后面的Demo演示中会展现。

        另外,如何实现跨平台呢?我这里是采用了逻辑和图形分离的方式,即提供一个GraphicsAPI,在GUI库中调用,开发者只需要根据需求改写GraphicsAPI就可以实现跨平台(理论上在Windows等操作系统上也可以用,只是没必要)。

三,命名:

        这个GUI库我将其命名为SXGUI,SX的含义一个是我的网名缩写,另一个是 Simple.X的意思,代表让它的简单易用的初衷。

四,当前进度&Demo程序演示:

进度:

        目前已经完成了GUI部分的开发,正在完善GraphicsAPI、降低改写难度以及图形库的兼容性优化(我用的平台是STM32F401RCT6,0.96寸OLED,开源出来的文件会自带我的OLED图形库和写好的GraphicsAPI)

Demo演示:

        使用Keil5优化等级 O3未开启微库

SXGUI库Demo演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【基于R语言群体遗传学】-14-种群起源的相对似然

我们可以将预测的基因型比例视为在种群中看到一组特定等位基因的概率。如果种群在等位基因频率上存在差异,我们可以使用基因型来推断个体起源于每个种群的相对可能性。大家可以先看一下之前的博客:群体遗传学_tRNA做科研的博客-CSDN博客 种群起源的相对似…

同星智能正式推出CAN总线一致性测试系统

CAN总线一致性测试系统 CAN FD/CAN总线一致性测试系统,在硬件系统上基于同星自主研发的总线分析工具,干扰仪,一致性测试机箱,并搭配程控电源,示波器,数字万用表等标准外围仪器设备;在软件上基于…

Python轻松实现人脸检测,打造专业级AI颜值鉴定工具

Python实现人脸检测 1. 简介1.1 人脸检测的背景和意义1.2 使用Python进行人脸检测的优势1.2.1 多种成熟的库和工具1.2.2 开发者社区的支持1.2.3 简便易用的语法和库 2. 准备工作2.1 Python环境的安装2.1.1 下载Anaconda2.1.2 安装Anaconda2.1.3 使用Anaconda 2.2 第三方库的安装…

数据结构——Trie

题目: 维护一个字符串集合,支持两种操作: I x 向集合中插入一个字符串 x𝑥;Q x 询问一个字符串在集合中出现了多少次。 共有 N𝑁 个操作,所有输入的字符串总长度不超过 10^5,字符串仅…

使用Python绘制箱线图并分析数据

使用Python绘制箱线图并分析数据 在这篇博客中,我们将探讨如何使用Python中的pandas库和matplotlib库来绘制箱线图,并分析数据文件中的内容。箱线图是一种常用的图表类型,用于展示数据的分布情况及其统计特性,如中位数、四分位数…

【Linux】vim详解

1.什么是vi/vim? 简单来说,vi是老式的文本编辑器,不过功能已经很齐全了,但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具,就连 vim的官方网站( http://www.vim.org)自己也说vim是一…

【Perforce】QAC-分析时如何不应用某些规则

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决扫描项目时如何不应用某些规则进行分析。 2、 问题场景 对于一些建议性的MISRA规则,不想用于项目扫描,如何处理? 3、软硬件环境 1、软件版本:HelixQAC23.04 2…

STM32CubeIDE离线汉化教程

按照网上的方法下载好ZIP文件后 帮助->安装新软件-> 按顺序选择文件 点击完成,后等待右下脚的精度条到位即可

总结之企业微信(一)——创建外部群二维码,用户扫码入群

创建外部群 企微接口中没有直接通过服务端API接口创建外部群 可以通过jssdk创建外部群:引用jssdk调用会话接口wx.openEnterpriseChat https://work.weixin.qq.com/api/doc/90000/90136/90511 创建外部群二维码 需要通过企业微信的应用,并且配置客户联…

绝区陆--大语言模型的幻觉问题是如何推动科学创新

介绍 大型语言模型 (LLM)(例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等)已展示出为各种应用生成类似人类文本的出色能力。然而,LLM 的一个鲜为人知的方面是它们倾向于“产生幻觉”或生成不正确或没有根据的事实陈述。我不认为这仅仅是一个限制…

下载安装Microsoft DirectX SDK(June 2010)

官方下载网址如下: Microsoft DirectX SDK(June 2010)链接 下载后是一个.exe文件 在安装之前,需要先检查你的电脑中是否已经安装过(如果你安装过VS,那么一定会有这两个文件) Microsoft Visual C 2010 x86 Redistribu…

解决 NullReferenceException: Object reference not set to an instance of an object

在 Unity 中 利用 URDF Importer import UR5e_gripper 的 URDF file 时出现错误: NullReferenceException: Object reference not set to an instance of an object。 理论上是有个Object 是 Null,当我再次检查URDF后仍觉得路径没有写错。 于是我 把Mesh…

压缩感知2——算法模型

采集原理 其中Y就是压缩后的信号表示(M维),Φ表示采集的测量矩阵,可以是一个随机矩阵,X代表原始的数字信号(N维)。 常见的测量矩阵——随机高斯矩阵 随机伯努利矩阵 稀疏随机矩阵等,矩阵需要满足与信号的稀…

SenseVoice - 阿里最新开源精准多语言语音识别与情感辨识模型 本地一键整合包下载

阿里巴巴近期发布了开源语音大模型项目FunAudioLLM,该项目包含了两个核心模型:SenseVoice和CosyVoice。可以精准多语言识别并且进行语音克隆 本地一键包下载地址: SenseVoice - 精准多语言语音识别与情感辨识模型 本地一键整合包下载 SenseVo…

Appium-移动端自动测试框架详解

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门,那么我们就直奔主题。文章结构如下: 为什么要使用Appium?如何搭建Appium工具环境?(超详细)通过demo演示Appium的使用Appium如何实现移动端UI自…

基层医院、专科医院云HIS系统,支持电子病历四级,全套源码交付

云HIS系统采用B/S架构云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能化、扩展化等设计方法,覆盖了基层医院的主要工作流程,能够与监管…

大模型常见的LoRA算法原理、实现和运用详解

文章目录 1. 前言2. 算法介绍2.1 微调2.2 核心思想 3. 几个关键问题3.1 LoRA如何应用在Transformer上3.2 LoRA的最佳秩r如何选择3.3 W W W和 Δ W \Delta W ΔW有什么关系 4. 源码5. 实际应用6. 总结7. 参考 1. 前言 本文是常用算法的快速浏览入门(扫盲&#xff0…

升级iOS18有问题?学会这2招能解决90%iOS问题!

在 iOS 18beta发布后,有部分朋友升级后表示遇到了各种奇怪问题,比如升级卡在Apple Logo,黑屏,无限重启,卡在恢复模式,程序闪退,电池消耗过快,发烫等问题。 于是,小编决定…

HTML(27)——渐变

渐变是多个颜色逐渐变化的效果,一般用于设置盒子模型 线性渐变 属性:background-image : linear-gradient( 渐变方向 颜色1 终点位置, 颜色2 终点位置, ......); 取值: 渐变方向:可选 to 方位名词角度度数 终点位置:可选 百分…

生物素标记的柚皮苷探针;Biotin-Naringin

生物素标记的柚皮苷探针(Biotin-Naringin)是一种结合了生物素(Biotin)和柚皮苷(Naringin)特性的化合物,它在有机合成及药物化学技术领域具有重要意义。以下是对该探针的详细解析: 一…