嵌入式开发之AWTK

AWTK

1.环境搭建

reference:
AWTK的参考文档docs

2.目录结构

  • bin/

    • cfg.conf 数据保存至此
    • lcdgui.exe 可直接查看修改结果,图形界面显示
  • design/

    • default

      • strings
      • ui 大量XML文件,可由AWTK Designer绘制生成XML文件
    • design

  • lib/ 库文件目录

  • res/ 资源文件目录

    • raw 原始资源文件目录
    • inc 修改生成的资源文件目录
  • scripts/

  • src/

    • base 底层代码,一般无需修改
    • ext 通用API和辅助代码
    • user 每个界面的业务逻辑,例如每个界面所需的操作,通过创建.c .h文件完成
  • test/ 单元测试目录

  • cp_res.sh

  • project.json 项目配置文件

  • Sconstruct Scons脚本

  • web.json


3.常用命令

  • 自动生成对应的xml文件(src目录下)该部分可以使用python脚本设计,进行json文件自动生成xml文件,方便创建UI XML文件。

4.重点详解

4.1控件

reference: reference: 《AWTK开发实践》4

AWTK 四大基本控件:窗口、基本控件、通用容器和扩展控件

这个不需要记,只是要清楚这些都是基于widget而衍生的,即widget_t为其基类,所以都可以称之为控件。

可去查看widget_t类的设计

4.1.1通用基础控件类型
4.1.2控件函数

reference: 《AWTK开发实践》4.2.4

  • widget_lookup()查找控件
  • widget_set_text_utf8设置文本内容
  • widget_get_prop获取控件指定属性的值
  • widget_use_style更新样式
4.1.3窗口

reference:《AWTK开发实践》4.3 4.4

window_manager对各个窗口进行集中管理

  • window 缺省的应用程序窗口,占用除system_bar_t之外的整个区域。

  • dialog 对话框

  • system_bar 一般设计为LCD顶部区域(独占),用来显示当前的标题和关闭按钮等

    注:其在第一个应用程序窗口之前打开

  • popup 弹出窗口 (区别于对话框)

4.2JOSN

描述界面的主体信息
GUI可以直接设计,然后生成XML文件
或者也可以采取JSON文件编写,然后自动生成XML文件(毕竟XML文件编码有点“啰嗦”)

案例讲解

  • 窗口window

    • title 界面标题

    • fscript 可c函数调用

  • 子选项child (结点样式)

    • node 结点名字

    • type 控件类型

    • 等等

  • 按键

4.3事件处理机制

reference:

《event_listener.md》

《AWTK开发实践》

  • 基础控件都有自己的通用事件
  • 界面业务逻辑的操作事件
4.3.1机制流程

触发事件,事件分发,捕获事件,实现功能。

  1. 触发事件,指的是用户相应的操作(键盘或者鼠标)

    支持的事件有(详情可见AWTK开发手册):

    global_key_up、global_key_down、global_key_long_press、key_up、key_down、key_long_press、key_down_before_children、key_up_before_children、pointer_up、pointer_down、pointer_move、click、timer、window_close、window_open、window_will_open、value_changed、focus、blur、value_changed_by_ui

  2. 事件分发 常用widget_dispatch分发事件

    • widget_dispatch 单控件,只能用于GUI线程
    • main_loop_queue_event 非GUI线程(可用于多线程)
    • idle_queue或timer_queue 多线程 (最佳选择)
  3. 捕获事件 用widget_on注册事件(其中有与之对应的回调函数)对应QT里面的信号与槽,实质就是GUI设计中的对事件处理的必要手段,详情可见《Linux程序设计》16

    • widget_lookup 查找控件

      //该函数的功能为查找指定名称的子控件
      widget_t *widget_lookup(widget_t* widget, const char * name,bool_t recursive);
      /**
      widget 控件对象
      name 子控件的名称
      recursive 是否递归查找全部子控件
      */
      
    • widget_on 注册事件

      //该函数的功能为注册指定事件的处理函数。事件的处理函数可以由自己设定,也可以使用通用的操作函数。
      uint32_t widget_on(widget_t* widget, event_type_t type, event_func_t on_event, void* ctx);
      /**
      widget 控件对象
      type 事件类型
      on_event 事件处理函数
      ctx 事件处理函数上下文
      */
      
  4. 处理函数 可以设计其注册的事件处理函数

    • ret_t 处理函数的返回值的类型
4.3.2事件类型

reference:

《AWTK开发实践》3.5.4

**event_type_t **类型常量定义EVT_…

  • 键盘事件
  • 鼠标事件
  • 控件事件

5.代码阅读

reference: 《AWTK开发实践》

详情可见AWTK的官网文档,或者下载AWTK后目录文档中也十分详细,不理解的函数使用可以翻阅手册。
如有错误,感谢指正,特此记录,删减许多,避免侵权,侵权必删。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用内容,有两个嵌入式GUI开发工具可以推荐:AWTK和GUIX。 AWTK是一款开源的嵌入式GUI软件,具有以下主要特点:开源且支持LGPL许可证,功能强大,能够实现嵌入式系统上的各种界面效果,具有较强的移植性,在单片机、ARM甚至DSP上都能运行,还有AWTK Designer界面设计工具,可简化设计过程,提高编程效率,同时有公司提供技术支持,并保持持续更新。 GUIX是微软的高级工业级GUI解决方案,专门针对深度嵌入式、实时和IoT应用程序而设计。微软还提供了名为GUIX Studio的桌面开发工具,开发人员可以在桌面上设计GUI并生成GUIX代码,然后将其导出到目标设备上。 这两个工具都具有强大的功能和良好的可靠性,并且都适用于嵌入式GUI开发,但选择哪个工具取决于具体项目需求和开发团队的偏好。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [推荐一款优秀的嵌入式GUI软件](https://blog.csdn.net/flylonginsky/article/details/124008563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [嵌入式GUI盘点-你了解几款?](https://blog.csdn.net/zhang062061/article/details/124311678)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值