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

TouchGFX之Button

TouchGFX中的按钮是一种感应触控事件的控件,能够在按钮被按下/释放时发送回调

代码

#ifndef TOUCHGFX_ABSTRACTBUTTON_HPP
#define TOUCHGFX_ABSTRACTBUTTON_HPP
#include <touchgfx/Callback.hpp>
#include <touchgfx/events/ClickEvent.hpp>
#include <touchgfx/widgets/Widget.hpp>namespace touchgfx
{
/* 按键抽象接口类 */
class AbstractButton : public Widget
{
public:/* 构造函数 */AbstractButton() : Widget(), action(), pressed(false){setTouchable(true);	//打开触摸功能}/* 点击事件处理函数 */virtual void handleClickEvent(const ClickEvent& event);/* 设置点击事件回调函数 */void setAction(GenericCallback<const AbstractButton&>& callback){action = &callback;}/* 执行点击事件回调函数 */virtual void executeAction(){if (action && action->isValid()){action->execute(*this);}}/* 获取按钮状态 */virtual bool getPressedState() const{return pressed;}protected:GenericCallback<const AbstractButton&>* action; //点击事件回调函数bool pressed; //按键状态(按下/松开)
};}#endif
#include <touchgfx/widgets/AbstractButton.hpp>namespace touchgfx
{
/* 点击事件回调函数 */
void AbstractButton::handleClickEvent(const ClickEvent& event)
{const bool wasPressed = pressed;pressed = (event.getType() == ClickEvent::PRESSED);/* 按钮状态改变,重绘 */if ((pressed && !wasPressed) || (!pressed && wasPressed)){invalidate();}/* 按下触发回调 */if (wasPressed && (event.getType() == ClickEvent::RELEASED)){executeAction();}
}
}

自定义按键

#ifndef BUTTONWITHCOLOR
#define BUTTONWITHCOLOR
#include <touchgfx/widgets/AbstractButton.hpp>using namespace touchgfx;class ButtonWithColor : public AbstractButton
{
public:ButtonWithColor(): AbstractButton(), upColor(0xFFFFFF), downColor(0xFFFFFF), alpha(255){}	virtual void draw(const Rect& invalidatedArea) const;virtual void setColor(const colortype colorReleased, const colortype colorPressed){upColor = colorReleased;downColor = colorPressed;}virtual Rect getSolidRect() const;void setAlpha(uint8_t newAlpha){alpha = newAlpha;}uint8_t getAlpha() const{return alpha;}colortype getCurrentlyDisplayedColor() const{return (pressed ? downColor : upColor);}virtual void invalidateContent() const{if (alpha > 0){Widget::invalidateContent();}}private:colortype upColor;colortype downColor;uint8_t alpha;
};#endif
#include <touchgfx/Drawable.hpp>
#include <touchgfx/hal/HAL.hpp>
#include <touchgfx/lcd/LCD.hpp>
#include <gui/common/ButtonWithColor.hpp>void ButtonWithColor::draw(const Rect& invalidatedArea) const
{const colortype color = pressed ? downColor : upColor;Rect dirty = invalidatedArea;translateRectToAbsolute(dirty);HAL::lcd().fillRect(dirty, color, alpha);
}Rect ButtonWithColor::getSolidRect() const
{Rect solidRect;if(alpha == 255){solidRect.width = rect.width;solidRect.height = rect.height;}return solidRect;
}
#ifndef SCREENVIEW_HPP
#define SCREENVIEW_HPP#include <gui_generated/screen_screen/screenViewBase.hpp>
#include <gui/screen_screen/screenPresenter.hpp>
#include <gui/common/ButtonWithColor.hpp>class screenView : public screenViewBase
{
public:screenView();virtual ~screenView() {}virtual void setupScreen();virtual void tearDownScreen();
protected:private:ButtonWithColor button;
};#endif // SCREENVIEW_HPP
#include <gui/screen_screen/screenView.hpp>
#include <touchgfx/Color.hpp>screenView::screenView()
{}void screenView::setupScreen()
{screenViewBase::setupScreen();button.setColor(Color::getColorFromRGB(0x00, 0xFF, 0x00), Color::getColorFromRGB(0x00, 0xFF, 0xFF));button.setPosition(100,100,100,100);add(button);
}void screenView::tearDownScreen()
{screenViewBase::tearDownScreen();
}

运行模拟器

左边松开 -> 右边按下

相关文章:

TouchGFX之Button

TouchGFX中的按钮是一种感应触控事件的控件&#xff0c;能够在按钮被按下/释放时发送回调 代码 #ifndef TOUCHGFX_ABSTRACTBUTTON_HPP #define TOUCHGFX_ABSTRACTBUTTON_HPP #include <touchgfx/Callback.hpp> #include <touchgfx/events/ClickEvent.hpp> #includ…...

计算机组成原理 — 指令系统

指令系统 指令系统指令的概述指令的格式指令的字长取决于 操作数类型和操作种类操作数的类型数据在存储器中的存放方式操作类型 寻址方式指令寻址数据寻址立即寻址直接寻址隐含寻址间接寻址寄存器寻址寄存器间接寻址基址寻址变址寻址堆栈寻址 RISC 和 CISC 技术RISC 即精简指令…...

使用easyYapi生成文档

easyYapi生成文档 背景1.安装配置1.1 介绍1.2 安装1.3 配置1.3.1 Export Postman1.3.2 Export Yapi1.3.3 Export Markdown1.3.4 Export Api1.3.6 常见问题补充 2. java注释规范2.1 接口注释规范2.2 出入参注释规范 3. 特定化支持3.1 必填校验3.2 忽略导出3.3 返回不一致3.4 设置…...

蓝桥杯练习题总结(三)线性dp题(摆花、数字三角形加强版)

目录 一、摆花 思路一&#xff1a; 确定状态&#xff1a; 初始化&#xff1a; 思路二&#xff1a; 确定状态&#xff1a; 初始化&#xff1a; 循环遍历&#xff1a; 状态转移方程&#xff1a; 二、数字三角形加强版 一、摆花 题目描述 小明的花店新开张&#xff0c;为了吸…...

Elasticsearch(15) multi_match的使用

elasticsearch version&#xff1a; 7.10.1 multi_match是Elasticsearch中的一种查询类型&#xff0c;允许在一个或多个字段上执行全文本搜索&#xff0c;并合并各个字段的结果得分。这种查询有助于实现跨多个字段的统一搜索体验。 语法 {"query": {"multi_m…...

nodejs的线程模型和libuv库的基本使用

文章目录 nodejs中集成addon本地代码的回调问题单线程事件驱动模型libuvlibuv基本框架addon中使用libuv代码nodejs中集成addon本地代码的回调问题 在C++的代码中,回调函数是一个基本的代码调用方式。而在我自己的开发实践中,需要在addon这样一个nodejs的本地化模块中实现一个…...

Uni-app/Vue/Js本地模糊查询,匹配所有字段includes和some方法结合使用e

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 1.第一步 需要一个数组数据 {"week": "全部","hOutName": null,"weekendPrice": null,"channel": "门市价","hOutId": 98,"cTime": "…...

深度学习pytorch——激活函数损失函数(持续更新)

论生物神经元与神经网络中的神经元联系——为什么使用激活函数&#xff1f; 我们将生物体中的神经元与神经网络中的神经元共同分析。从下图可以看出神经网络中的神经元与生物体中的神经元有很多相似之处&#xff0c;由于只有刺激达到一定的程度人体才可以感受到刺激&#xff0c…...

《苹果 iOS 应用开发与分发的关键问题解析》

一、背景 解决同事问的问题&#xff0c;来来回回被问好几次相同的问题&#xff0c;然后确认&#xff0c;我觉得不如写个文档 二、非研发人员安装iOS应用方式 TestFlightIPA 文件 对比 TestFlightIPA 文件安装方式TestFlight 是苹果提供的一个 beta 测试平台&#xff0c;开发者…...

爱上数据结构:顺序表和链表

一、线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条…...

python知识点总结(十)

python知识点总结十 1、装饰器的理解、并实现一个计时器记录执行性能&#xff0c;并且将执行结果写入日志文件中2、队列和栈的区别&#xff0c;并且用python实现3、设计实现遍历目录与子目录4、CPU处理进程最慢的情况通常发生在以下几种情况下&#xff1a;5、CPU处理线程最慢的…...

【Python】探索 Python 编程世界:常量、变量及数据类型解析

欢迎来CILMY23的博客 本篇主题为 探索 Python 编程世界&#xff1a;常量、变量及数据类型解析 个人主页&#xff1a;CILMY23-CSDN博客 Python系列专栏&#xff1a;http://t.csdnimg.cn/HqYo8 上一篇博客&#xff1a; http://t.csdnimg.cn/SEdbp C语言专栏&#xff1a; htt…...

vue页面实现左右div宽度,上下div高度分割线手动拖动高度或者宽度自动变化,两个div宽度或者高度拉伸调节,实现左右可拖动改变宽度的div内容显示区

实现左右或者上下div两部分拖动&#xff0c;宽度或者高度自动变化,实现流畅平滑的变化&#xff0c;还可以是实现拖动到一定宽度就不让拖动了&#xff0c;如果你不需要最小宽度&#xff0c;就直接去掉样式就行 这是页面。分左中右三部分&#xff0c;中间我是用来作为拖动的按钮…...

知攻善防应急靶场-Linux(1)

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全应急响应和知攻善防实验室靶场&#xff0c;记录自己的学习过程&am…...

ffmpeg命令行

ffmpeg 如果要在linux gdb 调试&#xff0c;需要在configure 时候不优化 开启调试 ./configure --enable-debug --disable-optimizations make如何开启gdb 调试 gdb ffmpeg_gset args -i test.hevc -c:v copy -c:a copy output_265.mp4rh264 的流生成mp4 文件&#xff0c;不转…...

VMware虚拟机更换引导顺序

前言 我用wmware装了黑群晖测试&#xff0c;将img转成vmdisk的格式之后发现系统引导盘之后1G&#xff0c;有点太小了 我准备把wmware的黑群晖系统迁移到新添加的虚拟磁盘里 1.登录黑群晖的SSH 请先在黑群晖的控制面板中的终端机和SNMP里面启用SSH功能&#xff0c;才能使用ss…...

RAFT:让大型语言模型更擅长特定领域的 RAG 任务

RAFT&#xff08;检索增强的微调&#xff09;代表了一种全新的训练大语言模型&#xff08;LLMs&#xff09;以提升其在检索增强生成&#xff08;RAG&#xff09;任务上表现的方法。“检索增强的微调”技术融合了检索增强生成和微调的优点&#xff0c;目标是更好地适应各个特定领…...

Stable Diffusion 本地训练端口与云端训练端口冲突解决办法

方法之一&#xff0c;修改本地训练所用的端口 1 首先&#xff0c;进入脚本训练器的根目录 例如&#xff1a;C:\MarkDeng\lora-scripts-v1.7.3 找到gui.py 2 修改端口号 因为云端训练器也是占用28000和6006端口 那么本地改成27999和6007也是可以的 保存退出&#xff0c;运行启动…...

C++学习day1

思维导图 定义自己的命名空间&#xff0c;其中有string类型的变量&#xff0c;再定义两个函数&#xff0c;一个函数完成字符串的输入&#xff0c;一个函数完成求字符串长度&#xff0c;再定义一个全局函数完成对该字符串的反转 #include <iostream> using namespace std;…...

openGauss CM

CM 可获得性 本特性自openGauss 3.0.0版本开始引入。 特性简介 CM&#xff08;Cluster Manager&#xff09;是一款数据库管理软件&#xff0c;由cm_server和cm_agent组成。 cm_agent是部署在数据库每个主机上&#xff0c;用来启停和监控各个数据库实例进程的数据库管理组件…...

马年开始杂谈补

总感觉时间越过越快&#xff0c;是不是年纪大了。马年春节9天假期&#xff0c;历史上最长春节&#xff0c;一眨眼就过去了。今年刚开始就发生了很多事&#xff0c;不知福祸。首先是人工智能发展迅速&#xff0c;各种智能体开始出现。美以伊战争&#xff0c;油价狂飙。到了3月&a…...

IDEA+Tomcat8.5实战:5步搞定Shiro550漏洞复现环境(附JDK1.7多版本切换技巧)

IDEATomcat 8.5实战&#xff1a;5步构建Shiro550漏洞研究环境与多版本JDK管理技巧 当你第一次尝试复现Shiro550漏洞时&#xff0c;是否曾被各种环境配置问题困扰&#xff1f;从JDK版本冲突到Tomcat端口占用&#xff0c;再到war包部署失败&#xff0c;每一个环节都可能成为新手研…...

Youtu-VL-4B-Instruct多模态模型部署教程:预防磁盘空间不足的5个实用技巧

Youtu-VL-4B-Instruct多模态模型部署教程&#xff1a;预防磁盘空间不足的5个实用技巧 1. 引言&#xff1a;多模态模型部署的磁盘挑战 部署大型多模态模型时&#xff0c;磁盘空间管理往往是第一个需要面对的挑战。Youtu-VL-4B-Instruct作为腾讯优图实验室开发的视觉语言模型&a…...

Youtu-VL-4B-Instruct图文理解效果集锦:源码部署后生成100+张高质量图片描述样例

Youtu-VL-4B-Instruct图文理解效果集锦&#xff1a;源码部署后生成100张高质量图片描述样例 1. 引言&#xff1a;一个能“看懂”图片的AI助手 想象一下&#xff0c;你随手拍了一张照片&#xff0c;发给一个朋友&#xff0c;他不仅能告诉你照片里有什么&#xff0c;还能分析场…...

如何快速掌握视频特效:StreamFX面向创作者的完整指南

如何快速掌握视频特效&#xff1a;StreamFX面向创作者的完整指南 【免费下载链接】obs-StreamFX StreamFX is a plugin for OBS Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even custom…...

FireRedASR-AED-L语音识别模型WebUI快速部署教程:Python环境一键配置

FireRedASR-AED-L语音识别模型WebUI快速部署教程&#xff1a;Python环境一键配置 语音识别技术正在快速融入我们的日常开发&#xff0c;无论是做智能客服、会议纪要&#xff0c;还是内容审核&#xff0c;一个好用的识别模型都能省下大量时间。但很多朋友在第一步——环境部署上…...

Python从入门到精通(第11章):函数进阶:作用域与闭包

Python从入门到精通&#xff08;第11章&#xff09;&#xff1a;函数进阶&#xff1a;作用域与闭包 开头导语 这是本系列第11章。前面你已经掌握函数的基本定义和调用方式&#xff0c;这一章在此基础上向前一步&#xff0c;解决三个实际问题&#xff1a;变量名冲突时 Python 到…...

开源小模型怎么选?Qwen1.5-0.5B-Chat轻量化优势解析

开源小模型怎么选&#xff1f;Qwen1.5-0.5B-Chat轻量化优势解析 1. 为什么需要轻量级小模型&#xff1f; 当我们谈论AI大模型时&#xff0c;很多人首先想到的是那些需要高端GPU、动辄几十GB内存的庞然大物。但在实际应用中&#xff0c;特别是个人开发者、中小企业或者教育场景…...

CoPaw代码生成能力展示:从自然语言描述到可运行Python脚本

CoPaw代码生成能力展示&#xff1a;从自然语言描述到可运行Python脚本 1. 开篇&#xff1a;当自然语言遇上代码生成 "能不能帮我写个Python脚本&#xff0c;把文件夹里的图片都转成灰度图&#xff1f;"这样的需求&#xff0c;现在可以直接说给CoPaw听。作为一款专注…...

RWKV7-1.5B-G1A快速原型:使用VMware虚拟机搭建隔离的模型测试环境

RWKV7-1.5B-G1A快速原型&#xff1a;使用VMware虚拟机搭建隔离的模型测试环境 1. 为什么需要虚拟机测试环境 在测试新的大语言模型时&#xff0c;最头疼的问题就是环境配置冲突。你可能遇到过这种情况&#xff1a;好不容易装好CUDA驱动&#xff0c;结果发现和现有项目的PyTor…...