ue5 运行时大纲视图中的数据获取方法

大纲视图需要treeview控件的树形结构展示,创建一个treeview需要两个要素:

1、Item:我称之为一组数据,就类似于一个actor中都包含哪些组件,或者是一个类与类中的成员。

2、treeview控件:实现树形结构的类,在这个类中将item作为数据添加到树形结构中,然后创建树形结构。

Item数据类的示例(没有什么复杂实现,所以只有一个.h就可以)

#pragma onceclass FCustomItemClass : public TSharedFromThis<FCustomItemClass>
{
public://FString Name;//TArray<TSharedPtr<FCustomItemClass>> Children;// 构造函数FCustomItemClass(const FString& InName) : Name(InName) { }	void addChild(TSharedPtr<FCustomItemClass> Child){Children.Add(Child);}
};

treeview类的示例

#pragma once
#include "CustomItemClass.h"class CUSTOMWINDOW_API SCustomOutliner : public SCompoundWidget
{
public:SLATE_BEGIN_ARGS(SCustomOutliner){}SLATE_END_ARGS()void Construct(const FArguments& InArgs);private:// 1. TreeView 必需的两个成员TSharedPtr<STreeView<TSharedPtr<FCustomItemClass>>> TreeViewWidget;  // TreeViewDataTArray<TSharedPtr<FCustomItemClass>> RootItems;                      // 根节点数组// 2. TreeView 必需的两个回调函数TSharedRef<ITableRow> OnGenerateRow(TSharedPtr<FCustomItemClass> Item, const TSharedRef<STableViewBase>& OwnerTable);void OnGetChildren(TSharedPtr<FCustomItemClass> Item, TArray<TSharedPtr<FCustomItemClass>>& OutChildren);};
#include "CustomOutliner.h"#include "CustomItemClass.h"
#include "Kismet/GameplayStatics.h"
#include "GameFramework/Actor.h"void SCustomOutliner::Construct(const FArguments& InArgs)
{UWorld* World = GEngine->GetWorldContexts()[0].World();if (World){TSharedPtr<FCustomItemClass> RootActor = MakeShareable(new FCustomItemClass("SceneActor"));TArray<AActor*> AllActors;UGameplayStatics::GetAllActorsOfClass(World, AActor::StaticClass(), AllActors);//遍历容器内元素for (AActor* Actor : AllActors){if (Actor){TSharedPtr<FCustomItemClass> ActorItem = MakeShareable(new FCustomItemClass(Actor->GetName()));//用于存储和管理场景中的组件数组。它通常用于存储USceneComponent对象,这些对象代表了场景中的各种组件,如网格体、摄像机等。TInlineComponentArray<UActorComponent*> Components;Actor->GetComponents(Components);for (UActorComponent* Component : Components){if (Component){TSharedPtr<FCustomItemClass> ComponentItem = MakeShareable(new FCustomItemClass(Component->GetName()));ActorItem->addChild(ComponentItem);}}RootActor->addChild(ActorItem);}}RootItems.Add(RootActor);}//这里是最简树形结构的数据示例TSharedPtr<FCustomItemClass> Root = MakeShareable(new FCustomItemClass("A"));TSharedPtr<FCustomItemClass> A1 = MakeShareable(new FCustomItemClass("A1"));TSharedPtr<FCustomItemClass> A2 = MakeShareable(new FCustomItemClass("A1_1"));Root->addChild(A1);A1->addChild(A2);RootItems.Add(Root);ChildSlot[SAssignNew(TreeViewWidget, STreeView<TSharedPtr<FCustomItemClass>>).TreeItemsSource(&RootItems).OnGenerateRow(this, &SCustomOutliner::OnGenerateRow).OnGetChildren(this, &SCustomOutliner::OnGetChildren)];
}TSharedRef<ITableRow> SCustomOutliner::OnGenerateRow(TSharedPtr<FCustomItemClass> Item,const TSharedRef<STableViewBase>& OwnerTable)
{return SNew(STableRow<TSharedPtr<FCustomItemClass>>, OwnerTable)[SNew(STextBlock).Text(FText::FromString(Item->Name))];
}void SCustomOutliner::OnGetChildren(TSharedPtr<FCustomItemClass> Item,TArray<TSharedPtr<FCustomItemClass>>& OutChildren)
{OutChildren = Item->Children;
}

显示(调用)方法

return SNew(SDockTab).TabRole(ETabRole::PanelTab).Label(FText::FromString("OutlinerTabLabel")) //使用宏DefineLabel.ToolTipText(FText::FromString("OutlinerTabToolTip"))[//创建一个树形结构类的实例SNew(SCustomOutliner)];

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS10.2 许可License点击始终启动无响应的解决办法及正常启动的前提

1、问题描述 在ArcGIS License Administrator中&#xff0c;手动点击“启动”无响应&#xff1b;且在计算机管理-服务中&#xff0c;无ArcGIS License 或者License的启动、停止、禁止等均为灰色&#xff0c;无法操作。 2、解决方法 ①通过cmd对service.txt进行手动服务的启动…

three.js+WebGL踩坑经验合集(1):THREE.Line无故消失的元凶

在项目开发过程中&#xff0c;笔者两次遇到同事的一个提问&#xff0c;我场景中的Line在相机旋转到某些角度或者移动到某些位置的时候会无故消失。由于业务场景复杂&#xff0c;所以这两位同事都是先花费了大量时间排查业务问题&#xff0c;然后才找我求助。这个问题抽象出来的…

微信小程序-点餐(美食屋)02开发实践

目录 概要 整体架构流程 &#xff08;一&#xff09;用户注册与登录 &#xff08;二&#xff09;菜品浏览与点餐 &#xff08;三&#xff09;订单管理 &#xff08;四&#xff09;后台管理 部分代码展示 1.index.wxml 2.list.wxml 3.checkout.wxml 4.detail.wxml 小结优点 概要…

windows git bash 使用zsh 并集成 oh my zsh

参考了 这篇文章 进行配置&#xff0c;记录了自己的踩坑过程&#xff0c;并增加了 zsh-autosuggestions 插件的集成。 主要步骤&#xff1a; 1. git bash 这个就不说了&#xff0c;自己去网上下&#xff0c;windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…

CDN、源站与边缘网络

什么是“源站” 源服务器 源服务器的目的是处理和响应来自互联网客户端的传入请求。源服务器的概念通常与边缘服务器或缓存服务器的概念结合使用。源服务器的核心是一台运行一个或多个程序的计算机&#xff0c;这些程序旨在侦听和处理传入的客户端请求。源服务器可以承担为网…

无人机 PX4 飞控 | PX4源码添加自定义参数方法并用QGC显示与调整

无人机 PX4 飞控 | PX4源码添加自定义参数方法并用QGC显示与调整 0 前言 之前文章添加了一个自定义的模块&#xff0c;本篇文章在之前的自定义模块中&#xff0c;添加两个自定义参数 使用QGC显示出来&#xff0c;并通过QGC调整参数值&#xff0c;代码实现参数更新 新增的参…

RabbitMQ 分布式高可用

文章目录 前言一、持久化与内存管理1、持久化机制2、内存控制1、命令行2、配置文件 3、内存换页4、磁盘控制 二、集群1、Erlang的分布式特性2、RabbitMQ的节点类型2.1、磁盘节点 (Disk Node)2.2、内存节点 (RAM Node) 3、构建集群3.1 普通集群3.2 镜像队列3.3、高可用实现方案3…

【JS|第28期】new Event():前端事件处理的利器

日期&#xff1a;2025年1月24日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

IDEA工具下载、配置和Tomcat配置

1. IDEA工具下载、配置 1.1. IDEA工具下载 1.1.1. 下载方式一 官方地址下载 1.1.2. 下载方式二 官方地址下载&#xff1a;https://www.jetbrains.com/idea/ 1.1.3. 注册账户 官网地址&#xff1a;https://account.jetbrains.com/login 1.1.4. JetBrains官方账号注册…

构建企业级React应用的进阶实践

构建企业级React应用的进阶实践 在当今前端开发领域&#xff0c;React凭借其组件化架构和声明式编程范式&#xff0c;已成为构建复杂用户界面的首选方案。本文将深入探讨React的高级应用场景&#xff0c;通过一系列精心设计的代码示例&#xff0c;展示如何打造高性能、可维护的…

技术总结:FPGA基于GTX+RIFFA架构实现多功能SDI视频转PCIE采集卡设计方案

目录 1、前言工程概述免责声明 3、详细设计方案设计框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGBFDMA图像缓存RIFFA用户数据控制RIFFA架构详解Xilinx 7 Series Integrated Block for PCI ExpressRIFFA驱动及其安装QT上位机HDMI输出RGB转BT…

HTML<kbd>标签

例子 在文档中将一些文本定义为键盘输入&#xff1a; <p>Press <kbd>Ctrl</kbd> <kbd>C</kbd> to copy text (Windows).</p> <p>Press <kbd>Cmd</kbd> <kbd>C</kbd> to copy text (Mac OS).</p>…

奇怪的单词(快速扩张200个单词)

这是一些非常奇怪的单词&#xff1a; screw n.螺丝&#xff1b;螺丝钉 screwdriver n.起子&#xff0c;螺丝刀&#xff0c;改锥 copulation n.连接 copulate a.配合的 bonk n.撞击&#xff1b;猛击 v.轻击&#xff1b;碰撞ebony n.黑檀couple n.夫妇blonde n.金发女郎intimacy…

【PostgreSQL内核学习 —— (WindowAgg(一))】

WindowAgg 窗口函数介绍WindowAgg理论层面源码层面WindowObjectData 结构体WindowStatePerFuncData 结构体WindowStatePerAggData 结构体eval_windowaggregates 函数update_frameheadpos 函数 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊…

[STM32 - 野火] - - - 固件库学习笔记 - - -十二.基本定时器

一、定时器简介 STM32 中的定时器&#xff08;TIM&#xff0c;Timer&#xff09;是其最重要的外设之一&#xff0c;广泛用于时间管理、事件计数和控制等应用。 1.1 基本功能 定时功能&#xff1a;TIM定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中…

鸿蒙next 自定义日历组件

效果图预览 20250124-113957 使用说明 1.选择日期左右箭头&#xff0c;实现每月日历切换&#xff0c;示例中超出当前月份&#xff0c;禁止进入下一月&#xff0c;可在代码更改 2.日历中显示当前选择的日期&#xff0c;选中的日期颜色可自定义 3.日历中可展示历史记录作为数据…

Linux 部署 Java 项目:Tomcat、Redis、MySQL 教程

在 Linux 服务器上部署 Java 项目通常需要配置应用服务器&#xff08;如 Tomcat&#xff09;、数据库&#xff08;如 MySQL&#xff09;和缓存服务器&#xff08;如 Redis&#xff09;。本文将详细介绍如何在 Linux 环境中部署一个 Java 项目&#xff0c;涵盖 Tomcat、Redis 和…

Python数据可视化(够用版):懂基础 + 专业的图表抛给Tableau等专业绘图工具

我先说说文章标题中的“够用版”啥意思&#xff0c;为什么这么写。 按照我个人观点&#xff0c;在使用Python进行数据分析时&#xff0c;我们有时候肯定要结合到图表去进行分析&#xff0c;去直观展现数据的规律和特定&#xff0c;那么我们肯定要做一些简单的可视化&#xff0…

【C++】特殊类设计、单例模式与类型转换

目录 一、设计一个类不能被拷贝 &#xff08;一&#xff09;C98 &#xff08;二&#xff09;C11 二、设计一个类只能在堆上创建对象 &#xff08;一&#xff09;将构造函数私有化&#xff0c;对外提供接口 &#xff08;二&#xff09;将析构函数私有化 三、设计一个类只…

Jetpack Compose 和 Compose Multiplatform 还有 KMP 的关系

今天刚好看到官方发布了一篇文章&#xff0c;用于讨论 Compose Multiplatform 和 Jetpack Compose 之间的区别&#xff0c;突然想起之前评论区经常看到说 “Flutter 和 CMP 对于 Google 来说项目重叠的问题”&#xff0c;刚好可以放一起聊一聊。 最近写的几篇内容写的太干&…