實習技能記錄【2】-----LVGL[基本概念]

LVGL主要概念

1. Screen (屏幕):

概念: 屏幕是 LVGL 應用程序中的頂層容器。它是用戶界面的根對象,所有的可見 UI 元素最終都會添加到某個屏幕上(通常是活動屏幕)。
功能:
作為其他 UI 元素的父對象。
可以擁有自己的背景顏色、背景圖片等樣式。
LVGL 可以管理多個屏幕,但在任何給定時刻只有一個屏幕是“活動的”并顯示給用戶。
可以通過函數如 lv_scr_load()lv_scr_load_anim()來加載和切換不同的屏幕。
可以使用lv_screen_active()獲取當前活動屏幕的指針。
本質: 屏幕本身也是一個lv_obj_t對象,只是它是最頂層的,沒有父對象(除了內部的顯示驅動器)。

2. Widgets (小部件):

概念: 小部件是預先構建的可交互或信息展示的 UI 組件,是構建用戶界面的基本 building blocks。
功能:
提供各種常見的 UI 元素,例如按鈕 (Button)、標簽 (Label)、滑塊 (Slider)、開關 (Switch)、圖表 (Chart)、列表 (List)、選項卡視圖 (Tabview)、儀表盤 (Gauge) 等等。
每個小部件都封裝了特定的功能和視覺表現。
可以通過 API 函數來創建、配置和控制小部件的行為和外觀。
可以響應用戶輸入(通過 Events)。
可以通過 Styles 進行定制。
本質: 每個小部件都是由一個或多個底層的 LVGL 對象(lv_obj_t)組合而成,并提供了特定的 API 來簡化其使用。

3. Events (事件):

概念: 事件是發生在 UI 對象上的動作或狀態改變,例如用戶的點擊、滑動、值改變,或者對象自身的創建、刪除、尺寸改變等。
功能:
允許應用程序響應用戶的交互和 UI 的狀態變化。
可以通過為對象注冊事件回調函數來處理特定的事件。
LVGL 定義了豐富的事件類型(例如
LV_EVENT_CLICKED,
LV_EVENT_VALUE_CHANGED,
LV_EVENT_DRAW_MAIN,
LV_EVENT_DELETE 等)。
一個對象可以注冊多個事件回調函數來處理不同的事件
事件回調函數可以接收事件發生的對象、事件代碼以及用戶自定義的數據作為參數。
本質: LVGL 內部維護著一套事件管理機制,當特定事件發生時,它會遍歷注冊到該對象上的回調函數并執行它們。

4. Parts (部件):

概念: 許多 LVGL 小部件并非單一的視覺元素,而是由多個可獨立樣式化的“部件”組成
功能:
允許對小部件的不同視覺組成部分進行精細的樣式控制。
例如,按鈕可能包含一個主背景部件 (LV_PART_MAIN) 和一個按下時的效果部件 (LV_PART_PRESSED)。滑塊可能包含一個背景 (LV_PART_MAIN)、一個指示器 (LV_PART_INDICATOR) 和一個旋鈕 (LV_PART_KNOB)。
在設置樣式時,可以指定要應用樣式的部件。
通過 lv_obj_get_part() 等函數可以訪問小部件的特定部件。
本質: 部件是小部件內部組織結構的一種邏輯劃分,每個部件仍然是一個 lv_obj_t 對象或其概念上的組成部分。

5. States (狀態):

概念: UI 對象可以處于不同的狀態,這些狀態會影響其視覺外觀和行為。
功能:
LVGL 定義了多種內置狀態(例如 LV_STATE_DEFAULT (默認), LV_STATE_PRESSED (按下), LV_STATE_FOCUSED (聚焦), LV_STATE_EDITED (編輯), LV_STATE_DISABLED (禁用), LV_STATE_CHECKED (選中) 等)。
一個對象可以同時處于多個狀態(例如,一個被禁用的按鈕也可能被按下)。
樣式可以根據對象的狀態進行定制,使得對象在不同交互階段呈現不同的外觀(例如,按下按鈕時顏色變深)。
在設置樣式時,可以使用狀態標志來指定樣式只在特定狀態下生效。
本質: 對象內部維護著一個狀態標志位,當對象的交互或屬性發生變化時,這個標志位會被更新。

6. Styles (樣式):

概念: 樣式定義了 UI 對象的外觀屬性,例如背景顏色、邊框寬度、字體、文本顏色、內邊距、外邊距、圓角等等。
功能:
允許開發者定制 UI 元素的外觀。
樣式是可重用的,可以應用到多個對象或對象的不同部件和狀態。
可以創建和修改樣式對象 (lv_style_t)。
可以使用 lv_style_set_… 系列函數設置樣式的各種屬性。
可以使用 lv_obj_add_style() 將一個或多個樣式應用到一個對象上,并可以指定應用的部件和狀態。
樣式可以層疊,后添加的樣式會覆蓋之前添加的相同屬性。
本質: 樣式存儲在一個 lv_style_t 結構體中,包含了各種視覺屬性的值。

7. Themes (主題):

概念: 主題是一組預定義的樣式集合,旨在為應用程序提供一致的視覺風格。
功能:
提供了一種快速且簡單的方式來為整個應用程序設置統一的外觀。
LVGL 內置了多個主題(例如默認主題、蒙特塞拉特主題等),并且也支持自定義主題。
主題通常會為各種常用的小部件定義好在不同狀態下的默認樣式。
可以通過 lv_theme_set_act() 函數來激活一個主題。
即使使用了主題,仍然可以針對特定的對象或部件添加或修改自定義樣式,以實現更精細的控制。
本質: 主題通常是一個初始化函數,它會創建一系列預定義的 lv_style_t 對象,并在創建小部件時默認應用這些樣式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900728.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900728.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900728.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【c++11】c++11新特性(上)(列表初始化、右值引用和移動語義、類的新默認成員函數、lambda表達式)

🌟🌟作者主頁:ephemerals__ 🌟🌟所屬專欄:C 目錄 前言 一、列表初始化 1. 大括號初始化 2. initializer_list 二、右值引用和移動語義 1. 左值和右值 2. 左值引用和右值引用 引用延長生命周期 左…

軟考中級-軟件設計師 2022年下半年上午題真題解析:通關秘籍+避坑指南

📚 目錄(快速跳轉) 選擇題(上午題)(每題1分,共75分)一、 計算機系統基礎知識 🖥?💻 題目1:計算機硬件基礎知識 - RISC(精簡指令集計算…

基于MCP協議調用的大模型agent開發02

目錄 在AI agent的開發過程中,如何使用mcp服務器作為大模型的工具調用‘百寶箱’? FastAPI FastMCP 本系列: 基于MCP協議調用的大模型agent開發01-CSDN博客 基于MCP協議調用的大模型agent開發02-CSDN博客 在AI agent的開發過程中,…

ES6(8) Fetch API 詳解

1. Fetch API 簡介 fetch 是 ES6 提供的基于 Promise 的 API,用于發送 HTTP 請求并處理服務器響應數據。與傳統的 XMLHttpRequest 相比,fetch 語法更加簡潔,使用 Promise 進行異步處理,避免了回調地獄。 1.1 fetch() 的基本用法 …

原生SSE實現AI智能問答+Vue3前端打字機流效果

實現流程: 1.用戶點擊按鈕從右側展開抽屜(drawer),打開模擬對話框 2.用戶輸入問題,點擊提問按鈕,創建一個SSE實例請求后端數據,由于SSE是單向流,所以每提一個問題都需要先把之前的實…

CUDA 工具鏈將全面原生支持 Python

根據 NVIDIA 在 2025 年 GTC 大會上的官宣,CUDA 工具鏈將全面原生支持 Python 編程,這一重大更新旨在降低 GPU 編程門檻,吸引更廣泛的 Python 開發者進入 CUDA 生態。以下是核心信息整合: 1. 原生支持的意義與背景 無需 C/C 基礎…

jupyter notebook 顯示conda虛擬環境

使用 nb_conda_kernels 安裝 nb_conda_kernels:這個包可以自動從你的 Conda 環境中發現并列出內核。 conda activate base # 確保你在 base 環境或任何其他環境中安裝 conda install nb_conda_kernels顯示jupyternotebook當前所在的位置。

【AI】MCP概念

一文講透 MCP(附 Apifox MCP Server 內測邀請) 7分鐘講清楚MCP是什么?統一Function calling規范,工作量銳減至1/6,人人手搓Manus!? | 一鍵鏈接千臺服務器,幾行代碼接入海量外部工具…

WSL1升級到WSL2注意事項

今天要在WSL上安裝docker,因為機器上安裝了wsl1,docker安裝后啟動不了,通過詢問deepseek發現docker只能在wsl2上安裝,因此就想著將本機的wsl1升級到wsl2。 確保你的 Windows 系統是 Windows 10(版本 1903 及以上&…

Pycharm常用快捷鍵總結

主要是為了記錄windows下的PyCharm的快捷鍵,里面的操作都試過了功能描述會增加備注。 文件操作 快捷鍵功能描述Ctrl N新建文件Ctrl Shift N根據名稱查找文件Ctrl O打開文件Ctrl S保存當前文件Ctrl Shift S另存為Alt F12打開終端(Terminal&…

電池分選機:新能源時代的品質守護者|深圳比斯特自動化

在這個新能源蓬勃發展的時代,電池作為能量的存儲與釋放單元,其性能與質量直接關系到整個系統的穩定運行與效率提升。而電池分選機,作為電池生產流程中的關鍵一環,正扮演著品質守護者的角色,為新能源產業的高質量發展保…

認識 Linux 內存構成:Linux 內存調優之虛擬內存與物理內存

寫在前面 博文內容涉及 Linux 內存構成基本認知包括虛擬內存和物理內存映射,多級頁表和MMU簡單認知理解不足小伙伴幫忙指正對每個人而言,真正的職責只有一個:找到自我。然后在心中堅守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是對大眾理想的…

SCI科學論文的重要組成部分

科學論文的核心結構 科學論文通常遵循IMRAD結構,即: 引言(Introduction)方法(Methods)結果(Results)討論(Discussion) 除此之外,還包括其他幾個關鍵部分。讓我為您詳細介紹每個部分的作用和重要性: 1. 標題(Title) 標題是論文…

期權時間價值與隱含波動率怎么選?

期權隱含波動率與時間價值要怎么選?期權隱含波動率IV對期權價格有著巨大的影響。整體來看,期權隱波與期權價格呈正相關關系。當期權隱波從低水平上升時,期權價格也會相應上漲;反之,當隱波下降,期權價格則會…

STM32 HAL庫擴大USB CDC的輸入緩沖區

STM32 HAL庫,使用USB, 擴大輸入暫存區的方法 使用STM32的USB通訊CubeMX建立配置Serial Wire時鐘配置USB配置時鐘頻率設置代碼編寫運行效果總結使用STM32的USB通訊 STM32可以不用使用串口轉換直接和USB通訊。這給串口調試提供了極大的方便。編程,我使用了STM32CubeIDE編程。這…

ffmpeg函數簡介(封裝格式相關)

文章目錄 🌟 前置說明:FFmpeg 中 AVFormatContext 是什么?🧩 1. avformat_alloc_context功能:場景: 🧩 2. avformat_open_input功能:說明:返回值: &#x1f9…

費馬小定理

快速冪 理論 a n a a ? a a^n a a \cdots a anaa?a,暴力的計算需要 O(n) 的時間。 快速冪使用二進制拆分和倍增思想,僅需要 O(logn) 的時間。 對 n 做二進制拆分,例如, 3 13 3 ( 1101 ) 2 3 8 ? 3 4 ? 3 1 3^{13}…

ADGaussian:用于自動駕駛的多模態輸入泛化GS方法

25年4月來自香港中文大學和浙大的論文“ADGaussian: Generalizable Gaussian Splatting for Autonomous Driving with Multi-modal Inputs”。 提出 ADGaussian 方法,用于可泛化的街道場景重建。所提出的方法能夠從單視圖輸入實現高質量渲染。與之前主要關注幾何細…

js中this指向問題

在js中,this關鍵字的指向是一個比較重要的概念,它的值取決于函數的調用方式。 全局狀態下 //全局狀態下 this指向windowsconsole.log("this", this);console.log("thiswindows", this window); 在函數中 // 在函數中 this指向win…

我的NISP二級之路-03

目錄 一.ISMS 二.IP 三.http 四.防火墻 五.文件 解析 解析 六.攻擊 解析 解析 七.風險管理工程 八.信息系統安全保護等級 九.我國信息安全保障 一.ISMS 1.文檔體系建設是信息安全管理體系(ISMS)建設的直接體現,下列說法不正確的是: A&#…