UE4 STreeView的使用和示例(C++实现)

本文介绍如何在UE4中使用STreeView控件,实现目录和文件的树形展示。通过创建自定义控件,解析目录结构,并利用STreeView的接口展示文件系统。教程包括控件创建、数据绑定及界面布局。

STreeView介绍:

  STreeView是UE提供的一个控件,其已经实现好一套框架,能够根据给定数据自动生成一个树形结构控件,UE的资源目录(SPathView.h)以及大纲视图(SOutlineTreeView.h)里的树状结构都是用此控件生成的。
  STreeView提供了丰富的接口,可以根据需要在构建控件时传入参数即可,这里介绍最简单的使用方法,只需要提供数据(TreeItemsSource)、生成Item方法(OnGenerateRow)、获取某个节点的子节点方法(OnGetChildren),具体是实现给定一个目录,用STreeView实现查看此目录下所有文件和文件夹。如下图所示:
在这里插入图片描述
  数据:实际上是一个数组,存储的是树所有根节点信息,每个节点需要存储节点需要表示的信息、父节点引用、子节点引用。

  生成Item方法:给定一个节点,自定义实现需要显示的内容,返回一个Widget用于Item的显示。一般会根据节点里存储的必要信息去生成文本控件,图片控件等去显示Item。

  获取某个节点的子节点方法:给定节点,返回其所有的子节点。这里可以做很多自定义,例如筛选功能就可以在这里根据规则只把所有子节点的符合要求的返回即可。

实例详细步骤:

  1、创建C++工程TreeViewDemo。
  2、创建自定义TreeView控件。在Source内创建STreeViewDemo类(S版控件)以及TreeViewWidgetDemo类(U版控件),对于为什么创建这两个类可以先了解一下UE Slate相关知识。
  Build.cs,添加依赖 “UMG”、 “Slate”、 “SlateCore”、 “EditorStyle”


using UnrealBuildTool;

public class TreeViewDemo : ModuleRules
{
   
   
	public TreeViewDemo(ReadOnlyTargetRules Target) : base(Target)
	{
   
   
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
	
		PublicDependencyModuleNames.AddRange(new string[] {
   
    "Core", "CoreUObject", "Engine", "InputCore", "UMG", "Slate", "SlateCore", "EditorStyle" });

		PrivateDependencyModuleNames.AddRange(new string[] {
   
     });
	}
}

  STreeViewDemo.h

#pragma once

#include "CoreMinimal.h"
#include "Widgets/SCompoundWidget.h"
#include "Widgets/Views/STableViewBase.h"
#include "Widgets/Views/STableRow.h"
#include "Widgets/Views/STreeView.h"

class FTreeViewInstanceData
{
   
   
public:
	//用于构造根节点
	FTreeViewInstanceData(const FString& InPath);

	//用于构造子节点
	FTreeViewInstanceData(const FString& InPath, TSharedPtr<FTreeViewInstanceData>&InParent);

	//获得条目标志的Icon,用于区分目录还是文件
	TSharedPtr<SWidget> CreateIcon() const;

public:
	// 目标路径
	FString DiskPath;

	// 路径最后的名字,如D:\Program Files (x86)\PVS-Studio,Name=PVS-Studio,若路径指向一个文件,则Name是不带扩展名的文件名 
	FString CleanName;

	// 标志DiskPath指向的是一个文件还是目录
	bool bIsDirectory;

	//记录此节点对应的父节点
	TSharedPtr<FTreeViewInstanceData> Parent;

	//记录此节点对应的所有子节点
	TArray<TSharedPtr<FTreeViewInstanceData>> Children;
};

class 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值