22、touchGFX學習Model-View-Presenter設計模式

touchGFX采用MVP架構,如下所示:
在這里插入圖片描述
本文界面如下所示:
在這里插入圖片描述
本文將實現兩個操作:
1、觸摸屏點擊開關按鍵實現打印開關顯示信息,模擬開關燈效果
2、板載案按鍵控制觸摸屏LED燈的顯示和隱藏

一、觸摸屏點擊開關按鍵實現打印開關顯示信息,模擬開關燈效果

實現的方向為view->present->model

1、添加led開關交互事件:button_clicked_led

在這里插入圖片描述

2、screenView.hpp中聲明button_clicked_led函數,再到screenView.cpp中定義此函數并執行通知Presenter層

在這里插入圖片描述
在這里插入圖片描述

3、screenPresenter.hpp中聲明button_clicked_led函數,screenPresenter.cpp中定義此函數將消息傳遞給model層

在這里插入圖片描述
在這里插入圖片描述

4、Model.hpp中聲明button_clicked_led函數,Model.cpp中定義此函數將依據此消息執行開關燈操作

在這里插入圖片描述
在這里插入圖片描述
如此即可完成觸摸屏開關控制硬件led燈的亮滅
在這里插入圖片描述

二、板載案按鍵控制觸摸屏LED燈的顯示和隱藏

流程方向:model->modelListener->present->view

1、ModelListener.hpp中聲明函數notify_key_event,并在Model.cpp中定義此函數,將外部按鍵的動作通知給modelListener

因為ModelListener被Model繼承了,也被screenPresenter繼承了
在這里插入圖片描述
在這里插入圖片描述

2、screenPresenter.hpp中聲明函數notify_key_event,并在screenPresenter.cpp中定義此函數,并通知給view

在這里插入圖片描述
在這里插入圖片描述

3、screenView.hpp中聲明函數notify_key_event,并在screenView.cpp中定義此函數,并更改界面燈的顯示隱藏

在這里插入圖片描述
在這里插入圖片描述

image1_led是這個燈的名字哈
在這里插入圖片描述
如此就實現了外部按鍵控制觸摸屏

三、補充另一個:按鍵切換屏幕背景色

在這里插入圖片描述
添加KeyController.cpp|KeyController.hpp文件
在這里插入圖片描述

KeyController.cpp

#include "KeyController.hpp"
#include "Key_Driver.h"using namespace touchgfx;void KeyController::init()//按鍵初始化
{//Key_Init();//在BSP中統一初始化
}bool KeyController::sample(uint8_t& key)//按鍵掃描
{uint8_t value = 0;if(Key_ScanPin(&value) < 0)return false;//Key_ScanPin按鍵掃描并獲取鍵值key = value;return true;
}

KeyController.hpp

#ifndef SCREENVIEW_HPP
#define SCREENVIEW_HPP#include <gui_generated/screen_screen/screenViewBase.hpp>
#include <gui/screen_screen/screenPresenter.hpp>
#include "stdint.h"class screenView : public screenViewBase
{
public:screenView();virtual ~screenView() {}virtual void setupScreen();virtual void tearDownScreen();virtual void button_clicked_led();virtual void notify_key_event(uint8_t event,uint8_t KeyValue);
protected:
};#endif // SCREENVIEW_HPP

TouchGFXHAL.cpp添加按鍵執行代碼
打開??TouchGFXHAL.cpp???文件新建一個??KeyController??對象
然后在??void TouchGFXHAL::initialize()??里面這個對象賦值給系統,記得調用初始化函數
在這里插入圖片描述
如此即可實現按鍵改變屏幕背景色

三、參考文章

沒使用過touchGFX則先看視頻:https://www.yuanzige.com/course/detail/80229
Model-View-Presenter設計模式示例:https://smallash.blog.csdn.net/article/details/127047799?spm=1001.2014.3001.5502

四、學習筆記

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

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

相關文章

Go語言之依賴管理

go module go module是Go1.11版本之后官方推出的版本管理工具&#xff0c;并且從Go1.13版本開始&#xff0c;go module將是Go語言默認的依賴管理工具。 GO111MODULE 要啟用go module支持首先要設置環境變量GO111MODULE 通過它可以開啟或關閉模塊支持&#xff0c;它有三個可選…

docker搭建LNMP

docker安裝 略 下載鏡像 nginx:最新版php-fpm:根據自己需求而定mysql:根據自己需求定 以下是我搭建LNMP使用的鏡像版本 rootVM-12-16-ubuntu:/docker/lnmp/php/etc# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 8.0…

Linux的基本權限(文件,目錄)

文章目錄 前言一、Linux權限的概念二、Linux權限管理 1.文件訪問者分類2.文件類型和訪問類型3.文件訪問權限的相關設置方法三、目錄的權限四、權限的總結 前言 Linux下一切皆文件&#xff0c;指令的本質就是可執行文件&#xff0c;直接安裝到了系統的某種路徑下 一、Linux權限的…

embed mongodb 集成spring

在property文件下添加 de.flapdoodle.mongodb.embedded.version5.0.5 spring.mongodb.embedded.storage.oplog-size0不指定數據庫&#xff0c;會使用test&#xff0c; port默認是0&#xff0c;隨機端口號。 oplog-size mac默認是192mb, 其他系統會使用5%的磁盤可用空間&#x…

SpringCloud實用篇6——elasticsearch搜索功能

目錄 1 DSL查詢文檔1.1 DSL查詢分類1.2 全文檢索查詢1.2.1 使用場景1.2.2 基本語法1.2.3 示例1.2.4 總結 1.3 精準查詢1.3.1 term查詢1.3.2 range查詢1.3.3 總結 1.4.地理坐標查詢1.4.1 矩形范圍查詢1.4.2 附近查詢 1.5 復合查詢1.5.1 相關性算分1.5.2 算分函數查詢1&#xff0…

Python 字節碼指令 LOAD_DEREF

LOAD_DEREF 是 Python 字節碼指令&#xff0c;它與閉包和嵌套函數有關。要理解 LOAD_DEREF&#xff0c;我們首先需要了解 Python 中的幾個概念&#xff1a;cell、free variable 和閉包。 Cell 和 Free Variables: 當一個嵌套函數引用了其上級作用域中的一個變量&#xff0c;但該…

【大數據Hive】hive 事務表使用詳解

目錄 一、前言 二、Hive事務背景知識 hive事務實現原理 hive事務原理之 —— delta文件夾命名格式 _orc_acid_version 說明 bucket_00000 合并器(Compactor) 二、Hive事務使用限制 參數設置 客戶端參數設置 客戶端參數設置 三、Hive事務使用操作演示 操作步驟 客…

(已解決)redis.get報錯com.alibaba.fastjson.JSONException: autoType is not support

redis存取值問題&#xff0c;存自定義實體對象&#xff1b; 第一次取的時候報錯&#xff1a;com.alibaba.fastjson.JSONException: autoType is not support。 GenericFastJsonRedisSerializer序列化和反序列化redis的value值&#xff0c;需要bean對象含有無參構造方法。 解決…

【C語言】回調函數,qsort排序函數的使用和自己實現,超詳解

文章目錄 前言一、回調函數是什么二、回調函數的使用1.使用標準庫中的qsort函數2.利用qsort函數對結構體數組進行排序 三、實現qsort函數總結 先記錄一下訪問量突破2000啦&#xff0c;謝謝大家支持&#xff01;&#xff01;&#xff01; 這里是上期指針進階鏈接&#xff0c;方便…

金融術語總結

洗錢 將犯罪或其他非法違法行為所獲得的違法收入&#xff0c;通過各種手段掩飾、隱瞞、轉化&#xff0c;使其在形式上合法化的行為。 存量客戶 某個時間段里原先已有的客戶,與新增客戶相對應。 月活躍用戶數量&#xff0c;MAU&#xff08;Monthly Active User&#xff0c;M…

【go語言基礎】go中的方法

先思考一個問題&#xff0c;什么是方法&#xff0c;什么是函數&#xff1f; 方法是從屬于某個結構體或者非結構體的。在func這個關鍵字和方法名中間加了一個特殊的接收器類型&#xff0c;這個接收器可以是結構體類型的或者是非結構體類型的。從屬的結構體獲取該方法。 函數則…

【100天精通python】Day37:GUI界面編程_PyQT從入門到實戰(上)

目錄 專欄導讀 1 PyQt6 簡介&#xff1a; 1.1 安裝 PyQt6 和相關工具&#xff1a; 1.2 PyQt6 基礎知識&#xff1a; 1.2.1 Qt 的基本概念和組件&#xff1a; 1.2.2 創建和使用 Qt 窗口、標簽、按鈕等基本組件 1.2.3 布局管理器&#xff1a;垂直布局、水平布局、網格布局…

typedef函數代碼段解釋以及部分Windows下的系統函數

文章目錄 1、typedef int (WINAPI* LPSDOLInitialize)(const SDOLAppInfo* pAppInfo)2、typedef int (WINAPI* LPSDOLGetModule)(REFIID riid, void** intf)3、typedef int (WINAPI* LPSDOLTerminal)();4、GetProcAddress運行時獲取一個動態鏈接庫&#xff08;DLL&#xff09;中…

mysql與redis區別

mysql和redis的數據庫類型 mysql是關系型數據庫&#xff0c;主要用于存放持久化數據&#xff0c;將數據存儲在硬盤中&#xff0c;讀取速度較慢。 redis是NOSQL&#xff0c;即非關系型數據庫&#xff0c;也是緩存數據庫&#xff0c;即將數據存儲在緩存中&#xff0c;緩存的讀取速…

網絡

mcq Java 傳輸層&#xff1a;拆分和組裝&#xff0c;完成端到端的消息傳遞&#xff0c;流量控制&#xff0c;差錯控制等 網絡層&#xff1a; 尋址、路由&#xff0c;復用&#xff0c;擁塞控制&#xff0c;完成源到宿的傳遞。 顯然A選項是錯誤的&#xff0c;有流量控制的是傳輸層…

JavaScript TypeScript

文章目錄 JavaScript語法事件處理與HTML和CSS集成前端框架和庫 TypeScript靜態類型檢查語法更好的可維護性 包管理工具npmpnpmyarnBower JavaScript JavaScript&#xff08;簡稱JS&#xff09;是一種廣泛應用于網頁開發的腳本語言。它被用來為網頁增加交互性和動態功能。以下是…

netty學習分享(一)

TCP與UDP TCP 是面向連接的、可靠的流協議&#xff0c;通過三次握手建立連接&#xff0c;通訊完成時要拆除連接。 UDP是面向無連接的通訊協議&#xff0c;UDP通訊時不需要接收方確認&#xff0c;屬于不可靠的傳輸&#xff0c;可能會出現丟包現象 端口號&#xff1a; 端口號用…

【微信小程序】記一次自定義微信小程序組件的思路

最近來個需求&#xff0c;要求給小程序的 modal 增加個關閉按鈕&#xff0c;上網一查發現原來 2018 年就有人給出解決方案了&#xff0c;于是總結下微信小程序自定義組件的思路&#xff1a;一句話&#xff0c;用 wxml css實現和原生組件類似的樣式和效果&#xff0c;之后用 JS…

【uniapp】uniapp設置安全區域:

文章目錄 一、效果圖:二、實現代碼: 一、效果圖: 二、實現代碼: {"path": "pages/index/index","style": {"navigationStyle": "custom","navigationBarTextStyle": "white","navigationBarTitle…

消息隊列學習筆記

消息隊列基礎 適合消息隊列解決的問題 異步處理&#xff1a;處理完關鍵步驟后直接返回結果&#xff0c;后續放入隊列慢慢處理流量控制&#xff1a; 使用消息隊列隔離網關和后端服務&#xff0c;以達到流量控制和保護后端服務的目的。能根據下游的處理能力自動調節流量&#x…