当前位置: 首页 > news >正文

MCU 的 TOP 15 图形GUI库:选择最适合你的图形用户界面(二)

在嵌入式系统开发中,选择一个合适的图形用户界面(GUI)库是至关重要的。在屏幕上显示的时候,使用现成的图形库,这样开发人员就不需要弄清楚底层任务,例如如何绘制像素、线条、形状,如果再高级一点,则可以绘制某些对象,例如窗口、按钮等。

第一期我们介绍了5个,今天继续介绍5个。

fa3d73956a75ca2b9cf7ebb1b9302105.jpeg

MCU 的 TOP 15 图形GUI库:选择最适合你的图形用户界面(一)

下面将介绍5个备受欢迎的嵌入式GUI库,分析它们的特点、优缺点、使用场景以及生态系统,以便开发人员能够更好地选择适合自己项目的GUI库。

6、Qt for MCU

https://www.qt.io/product/develop-software-microcontrollers-mcu

Qt for MCU 是Qt框架的一个版本,是一个完整的图形框架和工具包,专为嵌入式系统设计。Qt本身是一款强大、跨平台的C++图形用户界面开发框架,而Qt for MCU则专注于在资源受限的嵌入式环境中提供高性能的图形用户界面。

ad1b21d4cbd176572d67aa324434cab4.jpeg

特点

图形设计工具:Qt for MCU提供了可视化的图形设计工具,使开发者能够轻松设计和布局用户界面。这为快速原型设计和开发提供了便利。

跨平台支持:Qt for MCU继承了Qt框架的跨平台特性,可以在多种嵌入式系统和操作系统上运行,包括嵌入式Linux、FreeRTOS等。针对嵌入式、桌面和移动平台,所有平台都具有相同的代码库

硬件加速:Qt for MCU充分利用硬件加速技术,以提高图形渲染性能,适应对性能有高要求的嵌入式应用。

大型生态系统:Qt拥有庞大的生态系统和社区支持,提供了丰富的文档、示例和支持。这使得开发者能够更好地利用Qt for MCU的功能和特性。

7fd8835287ebbc53ee807608b1fa0b17.jpeg

0deef9539ff2225f416ad00d9cea7f88.png

使用场景:

复杂嵌入式系统:Qt for MCU适用于需要复杂图形用户界面的嵌入式系统,如工控系统、医疗设备等。

对GUI性能有高要求的项目:由于Qt for MCU的硬件加速特性,它适用于对图形性能有高要求的项目,如汽车仪表盘、航空航天设备等。

c5a384e80f4365f6cdea68ad21e810de.png

7efb8ed80ebdea4ebc11081e9edace50.png

学习难易程度:

Qt for MCU相对于一些轻量级GUI库来说,学习曲线较为陡峭。这主要因为Qt框架本身非常强大,但也为开发者提供了广泛的文档和教程。但是如果本身做过桌面端的开发,MCU使用起来上手会非常快

生态支持:

Qt for MCU作为Qt框架的一部分,继承了庞大的Qt生态系统和积极的社区支持。用户可以在社区中获得广泛的支持和资源,使其更好地利用Qt for MCU的功能。

d7b5a661c26023f367e9699ebf52d25e.jpeg

Qt for MCU是一款适用于嵌入式系统的强大图形用户界面框架。它的图形设计工具、跨平台支持和硬件加速特性使其成为复杂嵌入式系统中的优秀选择。然而,对于一些资源受限的嵌入式系统,可能需要权衡使用Qt for MCU的硬件资源占用和功能丰富性。

7、Embedded Wizard

https://www.embedded-wizard.de/

Embedded Wizard 是一款专为嵌入式系统设计的图形用户界面(GUI)开发工具,旨在简化和加速嵌入式GUI的开发过程。它提供了图形设计工具、嵌入式向导,代码生成器和运行时引擎,使开发者能够快速创建精美且高性能的嵌入式用户界面。

89a9bc19efdd464c1f872e687a582cbd.jpeg

特点

图形设计工具:Embedded Wizard提供了现代且友好的可视化图形设计工具,Embedded Wizard Studio,允许开发者以直观的方式设计和布局用户界面。这种设计方式降低了学习曲线,使得开发过程更加高效。

afc6242baa953d899a41245a6bd0a726.png

跨平台支持:Embedded Wizard支持多种硬件平台和嵌入式操作系统,包括ARM、MIPS、x86等,以及FreeRTOS、RTOS等。这使其成为一个具有广泛可移植性的工具。

代码生成器:Embedded Wizard能够自动生成优化的、可嵌入的GUI代码。这消除了手动编写大量底层代码的繁琐工作,提高了开发效率。

8b119891b25c66fb1e6db6a18011a417.png

运行时引擎:嵌入式Wizard的运行时引擎被优化,以提供高性能的图形渲染,适应对图形性能有高要求的嵌入式应用。

图形用户界面元素:非常丰富的界面元素可以选择,支持多帧和动画图像,非常适合动画图标,丰富的 GUI 组件模板,支持的帧缓冲区颜色格式。

5ee2c5e275a3c78bda4571066dc10799.png

使用场景:

复杂嵌入式系统:Embedded Wizard适用于需要复杂图形用户界面的嵌入式系统,例如汽车信息娱乐系统、医疗仪器等。

跨平台嵌入式项目:由于其可移植性,Embedded Wizard适用于跨多种硬件平台和操作系统的嵌入式项目。

学习难易程度:

学习Embedded Wizard相对较为平缓,尤其是对于有图形设计经验的开发者。其可视化工具使得开发者能够更容易上手,并快速掌握工具的使用方法。

79ceeb5b3dc57ceed56c7b4ccad480f8.png

生态支持:

Embedded Wizard拥有活跃的社区和强大的生态系统。用户可以在社区中获得支持、交流经验,并获取额外的文档和教程。这有助于开发者更好地利用Embedded Wizard的功能和特性。

Embedded Wizard是一款强大且高度可定制的嵌入式GUI开发工具。其图形设计工具、代码生成器和跨平台支持使其成为复杂嵌入式系统中的理想选择。尤其适用于需要高性能、精美界面的嵌入式应用

8、emWin

https://www.segger.com/products/user-interface/emwin/

emWin 是一款专为嵌入式系统设计的图形用户界面(GUI)解决方案,由SEGGER公司开发。作为一款商业解决方案,emWin提供了丰富的功能和灵活的定制选项,以满足各种嵌入式应用的需求。

490b10fc917f152ba359cd553997d518.jpeg

emWin 是一种嵌入式 GUI 解决方案,与具有专有操作系统的单任务和多任务环境或任何商业 RTOS(例如embOS)兼容。GUI 以“C”源代码形式提供。emWin 可以适应任何尺寸,无论是物理显示器还是虚拟显示器,独立于显示控制器和目标 CPU。

ST 用户可以免费使用名为“emWin for STM32”的 emWin 特定版本,以库的形式免费使用。

特点

灵活性和可定制性:emWin具有高度可定制的特性,令人惊叹的图形库,开发者可以根据项目的需求调整和优化界面元素,包括按钮、文本、图形等。

跨平台支持:emWin支持多种硬件平台和嵌入式操作系统,包括ARM、MIPS等架构,以及RTOS(实时操作系统)如FreeRTOS、Micrium等。

效率:emWin 是一个高性能图形软件包。它已针对 RAM 和 ROM 中的内存消耗最小化以及高速和多功能性进行了优化。这使其成为尖端的 GUI 解决方案。

全面的图形元素:emWin提供了丰富的图形元素,包括按钮、滑块、文本框等,以及支持触摸屏和非触摸屏设备。

e3d0f9d4a39437daa4f63f1ab76ca233.png

使用场景:

复杂嵌入式系统:emWin适用于需要复杂且高度定制的图形用户界面的嵌入式系统,如工业控制系统、医疗仪器等。

对图形性能有高要求的项目:由于其硬件加速技术,emWin适用于对图形性能有高要求的项目,如高分辨率显示和流畅的动画效果。

学习难易程度:

emWin的学习曲线较为陡峭,尤其对于初学者而言。由于其提供了丰富的功能和灵活的定制选项,可能需要花费一些时间来熟悉其API和工作流程。

990f276021c268f0c90dc02ec635c1a9.png

生态支持:

作为一款商业解决方案,emWin拥有强大的生态系统和技术支持。SEGGER公司提供了详细的文档、示例代码和技术支持,为开发者提供了全面的帮助。

emWin是一款强大、灵活且高性能的嵌入式GUI解决方案。它适用于复杂嵌入式系统和对图形性能有高要求的项目。由于其商业性质,开发者需要考虑商业授权费用。然而,对于需要强大图形功能的嵌入式应用,emWin是一个强有力的选择。

9、TouchGFX

https://support.touchgfx.com/zh-CN/docs/introduction/welcome

TouchGFX 是一款专为嵌入式系统设计的高性能图形用户界面(GUI)框架,以其引人注目的图形性能和丰富的功能而脱颖而出,适用于对用户界面有高要求的嵌入式应用。

29ee66db6761c426a0427900459de356.jpeg

TouchGFX 是一款针对 STM32 微控制器优化的先进免费图形软件框架。TouchGFX 利用 STM32 图形功能和架构,通过创建令人惊叹的、类似智能手机的图形用户界面,加速了物联网 HMI 革命。

特点

硬件加速图形渲染: TouchGFX通过硬件加速技术实现高性能的图形渲染,为用户提供流畅的界面体验,适用于对图形性能有高要求的项目。

a38962ee2609b2c42f564fa5ac24f9c8.jpeg

图形设计工具:TouchGFX提供了强大的图形设计工具,允许开发者以直观的方式设计和布局用户界面。可作为独立的软件工具使用,可轻松快速地进行图形评估和概念验证。这降低了学习曲线,使得开发过程更加高效。

可扩展和可定制:TouchGFX框架具有高度可扩展性和定制性,支持多种字体、颜色和图形效果,开发者可以根据项目需求进行定制,并轻松扩展新的图形元素和功能。

67a3035666f561e0801ad34ea2ef8451.jpeg

支持触摸屏和非触摸屏:TouchGFX支持触摸屏和非触摸屏设备,为开发者提供更多的输入选项。

跨平台支持:TouchGFX不仅支持多种嵌入式平台,还可以在不同操作系统上运行,具有出色的可移植性。

使用场景:

高要求图形性能的项目:TouchGFX适用于对图形性能有高要求的项目,如汽车仪表盘、医疗设备、家用电器等。

复杂嵌入式系统:TouchGFX适用于需要复杂且高度定制的用户界面的嵌入式系统

学习难易程度:

TouchGFX的学习曲线相对较平缓,尤其是对于有图形设计经验的开发者。其图形设计工具和文档使得开发者能够更容易上手,并快速掌握工具的使用方法。

e2663c1fdcc0fd6737e32865b29c778f.jpeg

生态支持:

TouchGFX拥有强大的生态系统和技术支持。STMicroelectronics公司提供了详细的文档、示例代码和技术支持,同时社区也活跃,为开发者提供了全面的支持

TouchGFX是一款强大、高性能且可定制的嵌入式GUI框架。其硬件加速技术、图形设计工具和跨平台支持使其成为对图形性能有高要求的嵌入式应用的理想选择。虽然可能涉及商业授权费用,但对于需要强大图形性能的项目而言,TouchGFX是一个值得考虑的解决方案。

10、CrankSoftware

https://www.cranksoftware.com/storyboard/capabilities/ui-scalability-mcu

Crank Software 是一家专注于嵌入式用户界面(UI)开发的软件公司,提供名为Storyboard的工具套件。Storyboard是一款用于创建丰富、现代化嵌入式用户界面的工具,旨在简化开发流程并提供高度可定制性。

61126daadf429a6a87c7ce32a3ab7777.jpeg

Storyboard 的独特架构与 MCU、交叉处理器和 MPU 兼容,让您可以自由地创建可扩展市场和硬件平台的嵌入式应用程序。通过引入可在开发周期的任何时刻轻松支持硬件更改的 UI 开发工具,帮助降低嵌入式项目的风险。

特点

专注于嵌入式UI:Crank Software致力于提供嵌入式系统的用户界面解决方案,关注于嵌入式设备的图形用户界面开发。开发人员可以从头开始创建令人惊叹的 UI,或直接从您最喜欢的设计工具(例如 Photoshop、Illustrator 或 Sketch)导入文件。

ca31b5568b5461a505939a89226653db.jpeg

全面的工具套件:公司的主要产品Storyboard提供了全面的工具套件,包括图形设计工具、交互式原型设计、代码生成等功能,为开发者提供了一体化的开发体验。Storyboard 包含旨在开发占用空间更少的应用程序的功能。通过简化运行时以节省资源以及在 C 回调和 Lua API 之间进行选择,Storyboard 可让您严格控制内存使用情况。

Storyboard 允许从 Photoshop、Sketch 和 Illustrator 等设计工具导入 GUI 图形内容,直接在目标硬件设备(微控制器、交叉设备或 MPU)上使用模拟器测试和验证功能

多平台支持:Crank Software的解决方案支持多种嵌入式平台,包括ARM、MIPS等处理器架构,同时可以运行于不同的嵌入式操作系统,如FreeRTOS、Linux等。

63bda3e9a97a79e2aa67f1f4ab3bba9a.jpeg

使用场景:

复杂嵌入式系统:Crank Software的解决方案适用于需要复杂且高度定制的嵌入式系统,如汽车仪表盘、医疗设备等。

多人协作开发:Storyboard的支持远程协作功能使其适用于需要多个团队成员协同开发用户界面的项目。

ecca934bd6fdaa3cc3946dd6699921ae.jpeg

学习难易程度:

学习曲线相对较平缓,特别是对于有图形设计和嵌入式开发经验的开发者而言。Storybard提供了详细的文档和示例,以帮助用户迅速上手。

生态支持:

Crank Software拥有积极的社区和技术支持。用户可以在社区中获得支持、交流经验,并获取额外的文档和教程。技术支持方面,Crank Software也提供了专业的支持服务。

Crank Software以其专注于嵌入式UI开发的定位和Storyboard的全面工具套件而著称。Storyboard 与许多微控制器 (MCU)、跨界处理器和 MPU 兼容。其专有技术将 UI 与后端分离,直到使用特定于硬件的运行时引擎从其库中导出。适用于需要高度定制和复杂用户界面的嵌入式系统项目。其支持多平台、高度可定制性和团队协作功能使其成为开发者在嵌入式UI领域的重要工具。

ba7d90ed32c2d341786a4b581050ee8c.jpeg

篇幅问题,本期介绍5个,下一期继续介绍。

往期推荐

8567be1e2b12ee09c6d21d6b4eb33bbd.jpeg

用 ESP32 制造便携式 IoT 显示器

1ac1b66595bbbf8a54f9bedcaf7fda9d.jpeg

【开源项目】用ESP32制作一个桌面天气预报站

6eb42837e040cc6bfe0cd50cd28de816.jpeg

介绍一个4000行代码的开源GuiLite,并移植到STM32,收藏

946337a582cf11785abccbd0286244fe.jpeg

介绍一款开源的GUI,LittlevGL,附带野火STM32F429 Demo,使用深黑色皮肤

1f7dbe3ccbebe3a7a3d3ea4e37e97ef5.jpeg

又一款极棒的开源免费小型GUI,仅需三个文件

相关文章:

MCU 的 TOP 15 图形GUI库:选择最适合你的图形用户界面(二)

在嵌入式系统开发中,选择一个合适的图形用户界面(GUI)库是至关重要的。在屏幕上显示的时候,使用现成的图形库,这样开发人员就不需要弄清楚底层任务,例如如何绘制像素、线条、形状,如果再高级一点…...

软件工程 单选多选补充 复刻

原文 软件的主要特性:无形、高成本、包括程序和文档 软件工程三要素:方法、工具、过程 螺旋模型包含风险分析 软件工程的主要目标:风险分析 面向对象开发:Booch、UML、Coad、OMT 软件危机的主要表现:软件成本太高…...

微前端个人理解与简单总结

最近一段时间在学习微前端,一开始是看各种博客了解微前端含义、对比多种微前端框架优劣,最后选择了qiankun、micro-app、wujie这三种微前端框架进行深入研究、对比。 微前端框架 推出时间 官方文档易读性 社区讨论活跃度 配置难度 Qiankun&#xff…...

PC端企业微信hook协议开发,获取要群发的客户群id

产品说明 一、 hook版本:企业微信hook接口是指将企业微信的功能封装成dll,并提供简易的接口给程序调用。通过hook技术,可以在不修改企业微信客户端源代码的情况下,实现对企业微信客户端的功能进行扩展和定制化。企业微信hook接口…...

RabbitMQ安装说明

注意: 本次安装以 CentOS 7为例 1、 准备软件 erlang 18.3 1.el7.centos.x86_64.rpm socat 1.7.3.2 5.el7.lux.x86_64.rpm rabbitmq server 3.6.5 1.noarch.rpm 2、安装Erlang rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm 3.、安装RabbitMQ 安装 rpm -ivh socat-1.7.3.2-…...

scrapy的建模及管道的使用

一、数据建模 通常在做项目的过程中,在items.py中进行数据建模 为什么建模 定义item即提前规划好哪些字段需要抓,防止手误,因为定义好之后,在运行过程中,系统会自动检查,配合注释一起可以清晰的知道要抓…...

Hadoop学习笔记(HDP)-Part.04 基础环境配置

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …...

【Linux】进程控制--进程创建/进程终止/进程等待/进程程序替换/简易shell实现

文章目录 一、进程创建1.fork函数2.fork函数返回值3.写时拷贝4.fork常规用法5.fork调用失败的原因 二、进程终止1.进程退出码2.进程退出场景3.进程常见退出方法 三、进程等待1.为什么要进行进程等待2.如何进行进程等待1.wait方法2.waitpid方法3.获取子进程status4.进程的阻塞等…...

用pip更新、安装python的包

查看pip的版本:python -m pip --version 例如,查看下pip的版本,在cmd下输入命令python -m pip --version,可以发现当前安装的pip的版本是23.2.1: 查看一个包的详情:python -m pip show 例如&#xff0c…...

spring boot 事件机制

目录 概述实践监听spring boot ready事件代码 源码初始化流程调用流程 结束 概述 spring boot 版本为 2.7.17 。 整体看一下spring及spring boot 相关事件。 根据下文所给的源码关键处,打上断点,可以进行快速调试。降低源码阅读难度。 实践 spring…...

分布式版本管理系统---->Git(Linux---centos(保姆式)讲解1)

文章目录: 1:什么是Git以及作用 2.Git的基本操作过程(创建git仓库,配置仓库的配置) 3.git的工作区,暂存区,版本库的关系 4.将文件添加到版本库:git add 与git commit -m命令 5.git log查看日志的引入 6.查看.git文件中的内容 7.修改文件内容查…...

B树你需要了解一下

介绍B树的度数主要特点应用场景时间复杂度代码示例拓展 介绍 B树(B-tree)是一种自平衡的树,能够保持数据有序,常被用于数据库和文件系统的实现。 B树可以看作是一般化的二叉查找树,它允许拥有多于2个子节点。与自平衡…...

MFC设置状态栏文本导致崩溃的原因

文章目录 问题和原因解决办法1.消息机制2.定时器问题和原因 本人在类A使用多线程执行操作并且调用了类B的设置状态栏文本的函数,导致崩溃 类A void A::distribute_n_start_msg(){((B*)m_parent)->received_msg_n_start...

配置typroa上传图片到gitee

一、gitee相关配置 到gitee官网创建一个新的仓库并获取其token gitee配置时候一定要新建仓库之后初始化好仓库 比如:创建出README.md文档 出现master这个显示界面,刚开始未初始化的时候是会报错的 二、typora相关配置 在typora这个位置下载插件 在p…...

java并发-线程生命周期

文章目录 前言状态图状态变化说明补充说明 前言 线程的生命周期指的是线程从创建出来到最终消亡的整个过程,以及过程中的状态变化。 状态图 以下图用mermaid语法绘制: #mermaid-svg-32vKT6KmFdlYvCnr {font-family:"trebuchet ms",verdana,…...

Javaweb之Vue路由的详细解析

5 Vue路由 5.1 路由介绍 将资代码/vue-project(路由)/vue-project/src/views/tlias/DeptView.vue拷贝到我们当前EmpView.vue同级,其结构如下: 此时我们希望基于4.4案例中的功能,实现点击侧边栏的部门管理,显示部门管理的信息&am…...

力扣:196. 删除重复的电子邮箱(Python3)

题目: 表: Person ---------------------- | Column Name | Type | ---------------------- | id | int | | email | varchar | ---------------------- id 是该表的主键列(具有唯一值的列)。 该表的每一行包含一封电子邮件。电子邮件将不包含…...

Ruby和HTTParty库下载代码示例

ruby require httparty require nokogiri # 设置服务器 proxy_host "" proxy_port "" # 定义URL url "" # 创建HTTParty对象,并设置服务器 httparty HTTParty.new( :proxy > "#{proxy_host}:#{proxy_port}" ) …...

Unity 使用Horizontal Layout Group和Toggle制作多个水平开关按钮实现自动排列和单个点击放大后的自动排列。

Unity的布局组件Horizontal Layout Group是很好用的,当然也包括其它布局组件也一样好用。 比如要实现多按钮开关自动水平排列,那么就可以使用它了。 首先我们为按钮创建个父物体(我这里使用了Scroll View中的Content作为父物体)…...

Python实现FA萤火虫优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法(Fire-fly algorithm,FA)由剑桥大学Yang于2009年提出 , …...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...