Slate文件目录树基础实现

目前UMG中并没有提供TreeView类,要使用TreeView必须使用Slate。

当前UE4版本4.8.3。

TreeView在UE4编辑器中被广泛的使用,但是出于某些不可知的原因无法在UMG中进行直接使用。鉴于制作复杂度较高的界面需要使用到Slate,对Slate进行专门的研究是有必要的。

本文参照Unreal官方社区文档Slate, Tree View Widget完成。

请注意:原始文档中并没有给出具体的文件浏览器实现,而是提供了作为其基础的目录树使用方式。

目录树数据结构

要实现目录树并不需要太复杂的数据结构,实现基本的功能即可。

TreeView中本身需要的数据是数组型的,这里定义的数据结构是节点使用的。

DDFileTreeItem.h

 

节点的数据结构较为简单,直接在头文件中对函数进行了实现。

目录树Slate控件

由于原始文档中提供的代码中引用的Engine是不必要的,故而在这里直接替换成了较为通用的HUD引用,这样就不会导致代码有项目相关性了。

这里先上代码,其他的一些说明放在代码后面。

SDDFileTree.h

 

SDDFileTree.cpp

代码的结构还是比较清晰的,这里需要注意的是,针对TreeView的事件是在控件本身生成的时候注册的。

其中,OnGenerateRow事件是STreeView和SListView的必须事件。当控件需要进行元素显示时,会对这个函数进行调用,获得需要显示的元素。

另外,代码中的OnSelectionChanged函数缺乏必要的安全检测,在使用中需要留意。

用于显示的数据是在Construct中通过调用RebuildFileTree()函数生成的。

最终结果

完成了上面的步骤之后,直接在HUD中对控件进行展示即可。

启动预览,由于没有进行布局,可以在最上方看到目录树的展示。

U10$_IA57URMV_PO0]6[JUC

至此,目录树的基本功能已经实现。

本博客所有内容遵循CC BY-NC-SA 4.0协议, 如有转载,请注明出处。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">