3. TouchGFX Designer 入门:界面布局、控件面板、交互逻辑配置、模拟器使用

好,这一章我们终于要打开 TouchGFX Designer 了。说实话,我第一次用这个工具的时候,心里还有点打鼓——毕竟之前做嵌入式 GUI 都是手写代码,突然来个拖拽式的工具,总觉得不踏实。但用下来发现,它确实能省不少事。

TouchGFX Designer 说白了就是一个可视化的界面编辑器。你不需要写一行代码,就能把屏幕布局、控件摆放、交互逻辑都搭好。它背后会自动生成 C++ 代码,你只需要在工程里编译就行。嗯,这里要注意:它生成的是框架代码,业务逻辑还是得你自己写。

核心思路: Designer 负责“搭积木”,你负责“让积木动起来”。

3.1 界面布局:从空白画布开始

打开 Designer 后,你会看到一个空白画布,默认是 480x272 的分辨率——这是很多嵌入式屏幕的经典尺寸。我个人习惯先设置好屏幕参数,再开始拖控件。

布局操作其实很简单:

  • 选中控件:点击画布上的控件,右侧属性面板会同步更新。
  • 移动控件:直接拖拽,或者用键盘方向键微调(我经常用这个,比鼠标准)。
  • 对齐控件:选中多个控件后,顶部工具栏会出现对齐按钮,左对齐、右对齐、垂直居中等等。
  • 调整大小:拖拽边缘,或者在属性面板里直接输入宽高数值。

你想想看,如果这些操作都要手写代码来调坐标,那得改多少次?我在项目里就吃过这个亏——早期版本全是手写布局,后来客户要改几个按钮位置,我改了一整天。用 Designer 之后,拖一下就行了。

小技巧: 按住 Ctrl 键可以多选控件,批量修改属性。比如统一改字体大小、统一改颜色,非常方便。

3.2 控件面板:工具箱里的宝贝

左侧的控件面板,就像你的工具箱。里面分了几大类:

分类 常用控件 我的使用建议
基本控件 Button、Text Area、Image、Box Button 和 Text Area 是最常用的,几乎每个界面都有
容器控件 Container、Scrollable Container、Slideable Container 容器用来分组管理,Scrollable 适合列表页
图表控件 Graph、Graph Series、Pie Chart 做数据展示时用,但注意性能,别放太多数据点
输入控件 Keyboard、Text Input、Slider Slider 做音量调节很顺手,Keyboard 需要自己配字库
动画控件 Animated Image、Button With Icon Animated Image 可以做帧动画,但别用太多帧,会吃内存

拖一个控件到画布上,右侧属性面板就会显示它的所有可配置项。比如 Button,你可以改它的背景色、文字、字体、按下时的颜色变化等等。我曾经在项目里犯过一个低级错误——按钮文字颜色和背景色设成了相近色,结果用户根本看不清。嗯,从那以后我每次改完颜色都会在模拟器里跑一遍看看。

注意: 控件面板里的“Wildcard”控件(通配符控件)不要乱用。它虽然灵活,但会生成额外的代码,影响编译体积。除非你真的需要动态替换图片或文字,否则尽量用固定控件。

3.3 交互逻辑配置:让界面活起来

光有静态界面是不够的,你得让按钮能响应点击、让滑块能改变数值。Designer 里通过“交互”面板来配置这些逻辑。

交互配置的核心是三个要素:

  • 触发条件:比如按钮点击、屏幕切换完成、定时器超时。
  • 动作类型:比如切换屏幕、改变控件属性、播放动画、发送信号。
  • 目标控件:动作作用在哪个控件上。

举个例子:我想让一个按钮点击后,跳转到另一个屏幕。操作步骤是这样的:

  1. 选中按钮。
  2. 在交互面板点击“添加交互”。
  3. 触发条件选“Clicked”(点击)。
  4. 动作类型选“New Screen”(新屏幕)。
  5. 目标屏幕选你要跳转的那个。

就这么简单。Designer 会自动生成对应的 Screen 切换代码。你想想看,如果手写,你得写回调函数、注册事件、处理屏幕生命周期……现在点几下鼠标就搞定了。

不过,交互配置也有坑。我记得有一次,我在一个界面上配了十几个交互,结果模拟器跑起来卡得要命。后来排查发现,有个定时器交互每 10 毫秒触发一次,刷新一个图片控件——这频率太高了,CPU 根本扛不住。所以我的建议是:定时器交互的触发间隔不要低于 50 毫秒,除非你确定硬件性能足够。

交互配置原则: 能用 Designer 配的交互,就不要手写代码。但复杂的业务逻辑(比如网络请求、数据处理),还是得回到 IDE 里写。

3.4 模拟器使用:不烧录也能看效果

Designer 自带一个模拟器,可以直接在 PC 上运行你的界面。这个功能太实用了——你不需要每次改个颜色就烧录一次固件,省下的时间够你喝好几杯咖啡。

模拟器的启动按钮在右上角,点一下就能跑起来。它会打开一个窗口,模拟目标屏幕的尺寸和触摸操作。你可以用鼠标点击、滑动,就像在真机上操作一样。

模拟器能做的事情:

  • 预览界面布局和交互效果。
  • 测试屏幕切换是否流畅。
  • 检查控件在不同状态下的显示(比如按钮按下、释放)。
  • 调试动画和过渡效果。

但模拟器也有局限性。它跑在 PC 上,用的是 PC 的 CPU 和内存,所以性能会比真机好很多。你在模拟器里觉得流畅的动画,到了真机上可能就卡了。所以我的习惯是:模拟器里看效果,真机上测性能。

调试技巧: 模拟器运行时,按 F12 可以打开性能监视器,能看到帧率和 CPU 占用。如果帧率低于 30fps,说明你的界面需要优化了。

3.5 本章知识体系总览

为了让你对本章内容有个整体印象,我画了一张结构图。它把 Designer 的四大核心模块串了起来:

TouchGFX Designer 核心模块 TouchGFX Designer 界面布局 控件面板 交互逻辑配置 模拟器使用 说明: 界面布局负责“长什么样”,控件面板提供“用什么搭”, 交互逻辑配置决定“怎么响应”,模拟器帮你“提前验证”。四者缺一不可。 使用 Designer 的核心流程:布局 → 放控件 → 配交互 → 模拟验证 布局 → 放控件 → 配交互 → 模拟验证

这张图把 Designer 的四个核心模块和它们之间的关系讲清楚了。你照着这个流程走,基本不会出大问题。

3.6 避坑指南:我踩过的几个坑

最后,分享几个我在实际项目中踩过的坑,希望能帮你省点时间:

  • 控件重叠问题:两个控件叠在一起时,后添加的控件会盖住先添加的。如果你想让某个控件在最上层,可以在“层级”面板里调整它的 Z 轴顺序。我曾经因为没注意这个,调试了半天才发现按钮被一个图片盖住了。
  • 字体缺失:Designer 里用的字体,在模拟器里能显示,但烧录到真机上可能就变成方框了。原因是真机字库里没有这个字体。解决办法是在工程配置里添加对应的字体资源。
  • 屏幕切换卡顿:如果你在交互里配了“New Screen”切换,但切换时卡顿,很可能是目标屏幕的图片资源太大。建议把图片压缩到合适的分辨率,或者用 PNG 格式代替 JPG(PNG 解码更快)。
  • 模拟器与真机不一致:模拟器里颜色看起来很正常,但真机上偏暗或偏亮。这是因为 PC 屏幕和嵌入式屏幕的色域不同。我的建议是:以真机为准,模拟器只做功能验证,不做颜色校准。

重要提醒: Designer 生成的代码是基于 TouchGFX 框架的,不要手动修改生成的文件。如果你改了,下次 Designer 重新生成时会覆盖掉你的修改。正确的做法是:在用户代码区(User Code)里写你的业务逻辑。