0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实战经验 | TouchGFX 控件附加 ClickListener 功能的方法介绍

STM32单片机 来源:未知 2023-11-17 17:40 次阅读


关键词:GUI,TouchGFX,Mixin,ClickListener


目录预览

1、引言

2、TouchGFX ClickListener 模板的使用

3、小结


01

引言


TouchGFX 是专用于 STM32 的图形界面设计软件,可用来低成本开发优秀的图形界面,TouchGFX 现已变的越来越流行。为了帮助客户更加深入地理解和使用 TouchGFX ,本文介绍了 TouchGFX Designer 中的 Mixin 功能,从基础示例 Button Example 出发,为文本框控件添加 ClickListener (Mixin 功能中的一项),并对源代码进行简单剖析。期望能帮助客户更深入地理解 STM32 TouchGFX 的相关功能。


02

TouchGFX ClickListener 模板的使用


2.1. C++模板编程基础


在示例介绍之前,让我们先熟悉一下 C++模板编程的一些基础知识。模板编程属于通用编程的范畴,是为“尚未确定类型”所写的函数或类。是可以产生更干净、更快速、更精明的软件的一个强力手段。


模板的优点:首先模板与某种特定类型无关,代码可重用性好;其次模板与平台无关,代码移植性好;另外模板代码在编译时才进行解释,在编译时确定检查数据类型,相比运行时检查,类型的安全性高。


模板的缺点:一是代码易读性不是很好,调试不便;二是用户工程代码中需要包含模板代码(非二进制库),编译的时间较长,二进制扩展性差;另外有可能会造成二进制代码膨胀(编译后二进制代码臃肿),我们在设计模板时,需要尽可能将 C++模板中与参数⽆关的代码分离出来。


2.2. TouchGFX Mixin 功能简介


模板一般分为函数模板和类模板。函数模板我们这里不做赘述,重点关注 TouchGFX Mixins 类模板。TouchGFX 的 Mixins 类模板用于拓展控件的功能,目前 TouchGFX v4.20.0 中有四个 Mixin 功能,分别是 Draggable、ClickListener、FadeAnimator 和MoveAnimator,分别为控件增添相关功能。如图 1 (TouchGFX Designer Mixins 功能)所示,本文主要针对 ClickListener 做具体介绍。


图1. TouchGFX Designer Mixins 功能


2.3. 基于 TouchGFX Button 例程使用 ClickListener 功能


2.3.1. TouchGFX 例程的代码生成


运行 TouchGFX Designer,选择 Examples;通过 Select Board Setup 选择STM32H735G DK 板;从众多例程中选择“Button Example”例程;将 Application name 改为 Button_Example,如下图图 2,然后点击 Create 创建工程。


图2.TouchGFX Designer 生成 Button Example 例程


进入 TouchGFX Designer 主界面后,会看到画布上有两个按钮和一个文本框,我们对界面不做更改,直接选择 Designer 右下角 (Run Target)生成代码。该操作将会复制TouchGFX 框架文件,生成配置文件、makefile、代码及资源文件(images、fonts、texts),然后编译链接、烧录目标板并运行。程序运行起来后,您可以熟悉一下该按钮例程应用。下面我们就针对该例程,为界面上的计数文本框控件注入 ClickListener 功能,应用实现“当点击计数文本框时,计数数字增加 2”的功能。


2.3.2. 为计数文本框控件添加 ClickListener 功能


我们在 TouchGFX Designer 主屏界面,点击 countTxt 文本框,然后在右侧属性栏中找到 Mixins,勾选 ClickListener,如图 3 所示。然后重新生成代码。


图3.TouchGFX Designer, 计数文本框 mixin ClickListener 功能


我们可以使用 VS code 编辑代码,或使用其它如 STM32CubeIDE 等工具编辑代码。打开 MainView.hpp,为计数文本框,添加代码如下(黄底色部分):



然后我们转到 MainView.cpp 文件,首先将 txtClickedCallback 对象与 MainView的 cntTextClickHandler(文本框点击处理函数)绑定,这是在 MainView 类的构造函数中初始化列表中实现的。将 txtClickedCallback 加入初始化列表中,参数使用指向MainView 中 cntTextClickHandler 函数的函数指针。我们还需要修改 setupScreen 函数,在这里为 countTxt 添加 ClickAction,参数使用 txtClickedCallback, 以实现在主屏界面创建时,将 countTxt 文本框的点击事件与 txtClickedCallback 对象绑定在一起。另外我们还需要实现 cntTextClickHandler,具体代码如下:



修改完成后,保存,编译,运行。您将会发现当每次点击 countTxt 文本框时,文本框计数会增加 2。至此,我们已经实现了为文本框控件加入 ClickListener 的功能。大家可以看到,在 TouchGFX 应用中使用 ClickListener 类模板做开发是十分便捷的,代码量也较小。下面我们对代码进一步解读。


2.3.3. ClickListener 模板代码


ClickListener 类模板是 TouchGFX 框架的一部分,封装在 ClickListener.hpp 中,代码如下:



ClickListener 是一个标准的类模板。所谓类模板,就是“包含一个或多个尚未确定类型”的类。必须将具体类型当作模板参数传入,才可使用。当传入模板参数后,该类模板便以你所指定的参数类型,由编译器进行实例化。将具体类型传入到类模板进行实例化,我们会得到一个新的 ClickListener 类,转变为从传入参数(某待定的类)的派生类。


在生成的代码 MainViewBase.hpp 中(MainView 是 MainViewBase 的派生类),我们可以找到 countTxt 的声明:


touchgfx::ClickListener< touchgfx::TextAreaWithOneWildcard > countTxt;

这里,该模板示例类是从 TextAreaWithOneWildcard 类(即原计数文本框类型)继承下来的。如果您选择的不是为文本框增加 ClickListener 功能,而是其它控件,则新的ClickListener 实例类将派生自您所用的控件。本例中的继承关系如下:


该 ClickListener 实例类是 TextAreaWithOneWildcard 类的派生类,不仅仅继承了TextAreaWithOneWildcard 的属性与方法,另外还添加了一个 GenericCallback 指针变量clickAction,该指针由附加的 setClickAction 方法赋值。由另一个方法 handleClickEvent使用,在 handleClickEvent 中在响应 Click 事件时,会调用该 clickAction。(关于callback 类的使用,我们这里不做赘述,如果您需要进一步了解,请参考 TouchGFX 相关文档)。


2.3.4. ClickListener 模板应用


我们清楚了 ClickListener 类模板的原理后,回头来看例子中的 ClickListener 的应用代码,就会发现其逻辑十分清晰。


首先在 MainView.hpp 中声明了一个 Callback txtClickedCallback, 和一个事件处理函数 cntTextClickHandler。在 MainView.cpp 中初始化该 txtClickedCallback, 将其与cntTextClickHandler 关联,即实现当调用该 Callback 时,会转到 cntTextClickHandler 进行处理。


再在 setupScreen 函数中调用 ClickListener 类模板接口 setClickAction 将txtClickedCallback 的地址赋给 ClickListener 实例化类的 clickAction 指针。则ClickListener 实例化类(这里即 TextAreaWithOneWildcard 类的派生类)在处理ClickEvent 时就会执行到 txtClickedCallback 关联的处理函数 cntTextClickHandler


最后需要实现 MainView 类中的 Click 事件处理函数 cntTextClickHandler,这里的实现为:当 Click 事件类型为“Click 按键释放”时调用 increaseValue 函数两次。


03

小结


TouchGFX 是 STM32 专用的界面设计工具,功能强大且易用。本文选择了 Mixins 功能进行简介,从基础示例 Button Example 出发,动手添加 ClickListener (Mixin) 功能,并从源代码的角度浅析了 ClickListener 类模板的使用,助力客户更深入地理解 STM32 TouchGFX。




完整内容请点击“阅读原文”下载原文档。


原文标题:实战经验 | TouchGFX 控件附加 ClickListener 功能的方法介绍

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632874
  • STM32
    +关注

    关注

    2266

    文章

    10870

    浏览量

    354759

原文标题:实战经验 | TouchGFX 控件附加 ClickListener 功能的方法介绍

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【全新课程资料】正点原子《基于GD32 ARM32单片机项目实战入门》培训课程资料上线!

    ,提高编程能力和实战经验 四、适合人群 (1)单片机编程初学者 (2)电子工程师 (3)对ARM32单片机有兴趣的技术爱好者 五、课程详细介绍 1、培训课程包含: (1)全套培训课程视频(已全部录制
    发表于 09-24 18:06

    图片动画控件和Video image控件的使用方法

    在UI开发过程中,序列帧基本是绕不开的,AWTK 支持多种方法实现序列帧显示,本文介绍图片动画控件和Video image控件的使用方法
    的头像 发表于 08-06 16:44 749次阅读
    图片动画<b class='flag-5'>控件</b>和Video image<b class='flag-5'>控件</b>的使用<b class='flag-5'>方法</b>

    TouchGFX 中 MCU 负载的计算过程介绍

    TouchGFX Desinger 下载的 TBS(TouchGFX Board Setup)大都带有 MCU 的 负载计算功能,那么如何在自己的板子上增加 MCU 负载计算功能
    的头像 发表于 05-24 13:24 440次阅读
    <b class='flag-5'>TouchGFX</b> 中 MCU 负载的计算过程<b class='flag-5'>介绍</b>

    touchgfx swipeContainer控件加入ScrollableContainer控件;SwipeContainer空间就用不了是哪里的问题?

    touchgfx 问题 :swipeContainer控件加入ScrollableContainer控件;SwipeContainer空间就用不了了,只能执行S
    发表于 03-22 11:48

    TouchGFX怎样任意修改控件大小?

    TouchGFX怎样任意修改控件大小,而不是只能选择固定的大小?
    发表于 03-18 07:17

    touchgfx如何改变图片颜色?

    touchgfx是否有提供函数可以直接改变image控件中图片的颜色,类似LVGL中图片控件的recolor函数,对图片重新着色成某种纯色图片,如果touchgfx没有这种函数,是否有
    发表于 03-15 06:24

    基本绝缘和附加绝缘介绍

    基本绝缘和附加绝缘是电气设备中两种重要的绝缘方式,它们在保证电气设备安全运行和人身安全方面起着至关重要的作用。本文将对基本绝缘和附加绝缘进行详细介绍。 一、基本绝缘 基本绝缘是指电气设备中直接与带电
    的头像 发表于 02-16 11:55 2592次阅读
    基本绝缘和<b class='flag-5'>附加</b>绝缘<b class='flag-5'>介绍</b>

    LabVIEW Tab选项卡控件XTab的使用方法

    选项卡控件是在界面开发中常常使用到的控件,通过多选项卡布局,将UI显示内容独立分为多个功能模块或者视图,用户可以通过单击选项卡来切换到所需的功能视图。
    的头像 发表于 01-02 09:24 2074次阅读
    LabVIEW Tab选项卡<b class='flag-5'>控件</b>XTab的使用<b class='flag-5'>方法</b>

    基于TouchGFX的智能手表设计(4)

    电子发烧友网站提供《基于TouchGFX的智能手表设计(4).pdf》资料免费下载
    发表于 12-29 17:31 4次下载

    基于TouchGFX的智能手表设计(3)

    电子发烧友网站提供《基于TouchGFX的智能手表设计(3).pdf》资料免费下载
    发表于 12-29 17:30 7次下载

    基于TouchGFX的智能手表设计(2)

    电子发烧友网站提供《基于TouchGFX的智能手表设计(2).pdf》资料免费下载
    发表于 12-29 17:29 5次下载

    基于TouchGFX的智能手表设计(1)

    电子发烧友网站提供《基于TouchGFX的智能手表设计(1).pdf》资料免费下载
    发表于 12-29 17:28 6次下载

    实战经验 | 如何在用户应用中开启 LoRa CAD

    STM32WL LoRa 发送数据,或做相应的操作。为了降低功耗,STM32WL不能一直处于接收状态,这样功耗会很高。我们可以开启 LoRa CAD(信道活动检测)功能,STM32WL 通过开启 CAD 功能,检测前导码的前 1/
    的头像 发表于 12-26 17:45 1421次阅读
    <b class='flag-5'>实战经验</b> | 如何在用户应用中开启 LoRa CAD

    实战经验 | STM32G474 中 Triggered-half 模式的实现

    关键词:Triggered-half,Interleave 目录预览 1、引言 2、Triggered-half 模式介绍 3、应用实例 4、小结 01 引言 STM32 G474 中包含了针对
    的头像 发表于 12-11 18:15 1717次阅读
    <b class='flag-5'>实战经验</b> | STM32G474 中 Triggered-half 模式的实现

    javaweb从入门到实战

    的学习和实践。本文将为大家详述JavaWeb的入门以及实战经验,希望能帮助到正在追求JavaWeb技术的开发者。 入门 1.1 Java基础知识 在学习JavaWeb之前,首先要掌握Java语言的基础知识,包括面向对象的概念、类与对象、继承与多态、异常处理等。理解这些基础概念对于
    的头像 发表于 12-03 11:44 1475次阅读