UE4-(UI)第七十三课Tree View树形结构

213 篇文章 590 订阅

一、Tile View需要提供树形结构数据,TreeView 和Tile View 都是继承自List View。

二、创建方法,与ListView创建方法一致,需要TreeEntry控件蓝图实现接口UserObjectListEntry,需要TreeItem基于Object的蓝图类。与Test用来显示UI到显示器中的控件蓝图。

区别:1.在TreeEntry中添加水平盒并放置Text(用于后面不同层级显示不同的缩进效果),水平盒选择根据内容大小自动调节大小

2.TreeItem蓝图中声明一个整数型变量。

三、详细操作流程:

1.应用UserObjectListEntry接口后,在Test控件蓝图中,选择创建TreeView控件,并将细节面板中的EntryWidgetClass选择TreeEntry

2.因为是树形结构,在一层下面有第二层,第二层具体的结构下面还有第三层。想要实现这个效果,需要有数据的填入,

所以在TreeItem中增加变量类型为TreeItem类型的数组变量,命名为Children。

3.先实现第一层逻辑:

在TreeItem蓝图在创建函数 名称为InitChildren,当变量生成后调用init方法进行对数据的填充,双击函数进入到函数内,创建局部变量Base,

实现逻辑:id值*10赋值给base变量,利用forloop节点循环从0-9,取值后与base相加,从而得到新值,添加到Children数组中。(如果想要实现树形展开根据不同的层级出现不同的首行缩进效果,可以在TreeItem蓝图类中声明一个用来传递层级的变量Level)

并将id与level设置为公共变量并且可以在生成时设置

蓝图逻辑:

4.在TreeEntry控件蓝图面板,使用OnListItemObjectSet事件节点实现当创建控件时,就要将对应的值设置到UI面板中。并且根据第几层控制水平盒中的Text控件的左侧留白。

注意:SetPadding时将Padding 分割脚本就可以出现设置四个方向上的留白属性

5.在Test 控件蓝图中创建InitTreeData函数,并使用Construct事件节点调用

在初始化函数中,根据类生成对象,选择TreeItem,并且将获取到的数据添加到TreeView中,并且调用InitChildren初始化数据

注意:id的值为1,否则后面id*int的方法结果始终为0;

调用InitChildren函数,是为了使Item中有子集可以打开第二层数据。

运行:

可以设置鼠标显示节点将鼠标显示,然后点击1,发现没有任何树结构效果。

最重要的一步:

6.在Test 蓝图控件中,选中TreeView,在细节面板的事件栏中,一定要设置OnGetItemChildren:意义为 当要获得该Item中的子元素时触发事件。

选择创建绑定事件,跳转到图表界面。根据创建的函数中传入的Item获取到该Item中存储的Children数组并将数组返回

编译运行:点击1后出现第二层

四、实现可多层点击效果

1.根据上面的流程,可知通过点击不同层的具体数字Item,获取到对应Item中的Children数组,就可以进行下一层的展开,所以要在一开始初始化InitChildren方法中,利用递归方法将多层的数据传入。

注意:使用递归可能造成死循环,甚至是一直循环下去,无法结束循环,此示例中就是循环无法终止,

因为创建一个TreeItem就要进入到TreeItem的InitChildren方法中进行再次创建该类并且初始化数据,会一直创建下去,无法结束循环,所以进行一个条件设置,当第四层以后就不在有子集。正确逻辑如下:

2.运行,点击不同数字,打开不同的树结构。

  • 13
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值