Kanzi:关于kanzi的一点杂谈

news/2025/2/16 1:56:31/

概述:

做过开发的小伙伴在初次接触Kanzi Studio 这个开发工具时,可能有点摸不着头脑,由于 它不像Android studio 也 不像QT ,而且最大的一个区别是:kanzi基本不用写代码逻辑来控制程序显示UI,但是Android studio或者 QT是需要写的。而且很显然 kannzi Studio 在没有任何开发基础的上,也可以像搭积木一样搭建ui 。但是搭建ui 积木,也是需要一个底层逻辑和思路,下面我谈一谈这个底层逻辑思路。

一般如果要搭建一个ui 积木,在我的理解中,可以遵循下面三个规范。

1:组装

所有的ui 页面都是由 Page 页面构成的,我们将不同的特性(比如 Button 2D ,ScrollPage 2D)的组件可以 按照一定的位置特点先组装起来,这个过程,你不用关心业务,只需要关心关心ui 设计图,并且这个搭建的积木能组装出ui 设计图即可。

2:链接

在组装完毕之后,这个之后组装图可能 会呈现不同的状态,不同的样貌,这个时候kanzi 引入了 State Manage状态机这个概念,状态机维护着不同的状态 ,每个状态会 呈现出不同的ui 。 那么状态机的这个状态,又是由于谁确定的了,答案就是 Property 属性。State Manager 可以 根据Property不同的 取值,来决定当前 的 State。同样的,状态机State Manager不同的 状态 State又可以给其他的 属性Property 设置值。这样就形成一个相辅相成的状态 。即(Property 属性值  可以决定状态机StateManager的不同状态 ,反过来StaateManager的某个状态又可以 设置某个属性)。

3:交互

经过步骤1步骤2我们已经设计出丰富的不同特性的ui 画面,但是这些ui 画面 是一个 静态的,没有和用户交互的功能,如果我们要设计能和 用户交互的ui 画面,我们需要借助 Node Compent这个属性,在 Node Compent中我们可以说 uiAction的 不同的动作 事件Event ,来完成和用户的 交会功能。

4:映射

完成步骤1,2,3之后,这时候设计师就基本完成了 HMI的设计,但是你是否考虑这么一个问题,ui Action的交互动作如何映射到C++代码 中,这个时候就是Kanzi UI Compent插件在发挥作用了,ui Compent插件可以帮助 C++代码区遍历 每个ui 节点页面,拿到节点页面后,在对每个页面进行操作(这个也可以认为是  Kanzi Engine API 功能)比如像下面这样:

// Use kanzi.hpp only when you are learning to develop Kanzi applications.
// To improve compilation time in production projects, include only the header files of the Kanzi functionality you are using.
#include <kanzi/kanzi.hpp>
#include <iostream>using namespace kanzi;
using namespace std;class Helloworld : public ExampleApplication
{
public:virtual void onConfigure(ApplicationProperties& configuration) KZ_OVERRIDE{configuration.binaryName = "helloworld.kzb.cfg";}virtual void onProjectLoaded() KZ_OVERRIDE{cout << __func__ << endl;// Project file has been loaded from .kzb file.kzLogInfo(KZ_LOG_CATEGORY_GENERIC, ("hello world"));ScreenSharedPtr screenNode = getScreen();TextBlock2DSharedPtr text2dNode = screenNode->lookupNode<TextBlock2D>("#helloworld");text2dNode->setText("helloworld");// Add initialization code here.}
};Application* createApplication()
{return new Helloworld;
}

 

 

 5:Property属性值得获取途径

获取途径我这里归纳了三种方式:

  1. 系统性的属性:比如ToggleState属性 (ButtonConcept.ToggleState (Toggle State))这个是自动获取 系统 Toggle 控件开关状态的属性。
  2. 代码逻辑属性:【Visible】= {#root/Zone1.HUDViewVisibleaaa}  这个是绑定了代码逻辑属性,宁并且将 HUDViewVisibleaaa 映射到 C++代码中,这个C++可以根据某些条件动态的得到某个值后 ,动态的设置这个Visible属性
  3. 绑定上一个页面获取:【Zone1.HUDViewController】= {../Zone1.HUDViewController}   绑定了上一个页面HUDViewController属性值 

以上就是关于 KANZI一点小小的感悟,比较简单也很直接,后面会一直更新,以记载更深层次的理解和体会


http://www.ppmy.cn/news/854.html

相关文章

​力扣解法汇总1769. 移动所有球到每个盒子所需的最小操作数

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 有 n 个盒子。给你一个长度为 n 的二进制字符串 boxes &#xff0c;其中 boxes[…

Elasticsearch_第一章_ elasticsearch基础

Elasticsearch_第一章_ elasticsearch基础 – elasticsearch基础 文章目录Elasticsearch_第一章_ elasticsearch基础0.学习目标1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用1.1.2.ELK技术栈1.1.3.elasticsearch和lucene1.1.4.为什么不是其他搜索技术&#xff1f;1…

Vue系列之v-for循环结构

文章の目录一、v-for循环数组二、v-for循环对象三、v-if与v-for一起使用写在最后一、v-for循环数组 <li v-for"item in items">{{item}}</li>其中 items 是源数据数组&#xff0c;而 item 则是被迭代的数组元素的别名。 v-for 还支持一个可选的第二个参…

基于Springboot旅游网站管理系统、Springboot旅游线路和景点网站系统设计与实现 毕业设计开题报告

本科生毕业论文 基于java(springboot框架)旅游网站管理系统 开题报告 学 院&#xff1a; 专 业&#xff1a; 计算机科学与技术 年 级&#xff1a; 学生姓名&#xff1a; 指导教师&…

第二证券|抖音发布三季度安全透明度报告,整治贩卖焦虑广告近3万条

近来&#xff0c;抖音发布《2022年第三季度安全透明度陈述》(以下简称《陈述》)。《陈述》显现经过要点整治&#xff0c;渠道不标准表达削减超越30%&#xff0c;不实信息被告发量同比下降36.7%&#xff0c;整治贩卖焦虑广告2.9万条。一起&#xff0c;抖音还更新了《社区自律条约…

电子招标采购商城系统:优化传统采购业务,提速企业数字化升级

后疫情时代&#xff0c;电子元器件供应链发生了巨大的变化&#xff0c;缺货已经影响了大多数企业&#xff0c;电子元器件采购人员每天被“缺货”“涨价”的字眼包围着&#xff0c;对电子元器件企业的发展带来了极大的限制。当前&#xff0c;借助数字化技术对电子元器件采购管理…

Deadlock found when trying to get lock; try restarting transaction

报错详情 Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction The error may involve com.iss.cms.fdrb.common.dao.entity.InterfaceQueue.updateInt…

将整个网站变为黑白色

目录 效果&#xff1a; 代码&#xff1a; 兼容性写法&#xff1a; 原理&#xff1a; 效果&#xff1a; ps&#xff1a;实测淘宝也是用的这种方式&#xff0c;有兴趣可以去看看 代码&#xff1a; 使用方式就是找到根标签&#xff0c;将里面的两行代码放进去即可 html {filte…