UE4 Slate控件之TreeView 使用例子(一)
TreeView例子
先从Contruct中往子Slot添加Widget,先声明指向STreeView的指针,后续方便进行视图的一些操作
TSharedPtr<STreeView<TSharedPtr<FString>>> TreeBeingTested;
TArray<TSharedPtr<FString>> Items;
.ItemHeight,.TreeItemsSource,.OnGenerateRow,通过跳到对应的声明处,可以知道这有些是通过SLATE_BEGIN_ARGS或SLATE_EVENT声明注入的,就需要通过.XXX(YYY)的方式初始化,TreeView有些EVENT是必须要有初始化的,不然会报错,例如OnGetChildren,
ChildSlot
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
[
SNew(SBorder)
.BorderImage(FCoreStyle::Get().GetBrush("ToolPanel.GroupBorder"))
[
SAssignNew(TreeBeingTested, STreeView< TSharedPtr<FString> >)
.ItemHeight(24)
.TreeItemsSource(&Items)
.OnGenerateRow(this, &SSkillLogTreeWidgetItem::OnGenerateWidgetForTree)
.OnGetChildren(this, &SSkillLogTreeWidgetItem::OnGetChildrenForTree)
.WheelScrollMultiplier(60.f)
.OnSelectionChanged(this, &SSkillLogTreeWidgetItem::OnSelectionChanged)
.HeaderRow
(
SNew(SHeaderRow)
+ SHeaderRow::Column(Args._ColumnName).FixedWidth(150.0f).DefaultLabel(Args._ColumnLabel)
)
]
]
]
];

ArgumentType就是我们在STreeView进行New时候写的

所以OnGetChildren函数就是

当选择元素的时候会执行的事件,此处很多函数内部都是用SLATE_EVENT进行前置声明,只需要在SAssignNew或SNew的时候,通过.XXX=(XXXXX)实现事件功能
void SSkillLogTreeWidgetItem::OnSelectionChanged(TSharedPtr<FString> Item, ESelectInfo::Type SelectInfo)
{
if (!Item.IsValid())
return;
UpDateWidgetItemByColumnAndID(ColumnName.ToString(), **Item.Get());
}
为TreeView生成每一个Widget,也就是每一行
TSharedRef<ITableRow> SSkillLogTreeWidgetItem::OnGenerateWidgetForTree(TSharedPtr<FString> InItem,
const TSharedRef<STableViewBase>& OwnerTable)
{
return SNew(SSkillLogItemEditor, OwnerTable).ItemToEdit(InItem);
}
因为每一行的元素都要看成一个个体,也就是类的实例,当多Column的时候需要类需要继承SMultiColumnTableRow
class SSkillLogItemEditor : public SMultiColumnTableRow<TSharedPtr<FString>>
{
public:
SLATE_BEGIN_ARGS(SSkillLogItemEditor) : _ItemToEdit()
{}
SLATE_EVENT(FOnCanAcceptDrop, OnCanAcceptDrop)
SLATE_EVENT(FOnAcceptDrop, OnAcceptDrop)
SLATE_EVENT(FOnDragDetected, OnDragDetected)
SLATE_ARGUMENT(TSharedPtr<FString>, ItemToEdit)
SLATE_END_ARGS()
void Construct( const FArguments& InArgs, const TSharedRef<STableViewBase>& InOwnerTableView);
virtual TSharedRef<SWidget> GenerateWidgetForColumn(const FName& ColumnName) override;
FText GetID() const;
private:
TSharedPtr<FString> ItemToEdit;
};
这个地方可以用ColumnName生成不同的TextBlock
void SSkillLogItemEditor::Construct(const FArguments& InArgs, const TSharedRef<STableViewBase>& InOwnerTableView)
{
ItemToEdit = InArgs._ItemToEdit;
FSuperRowType::Construct(FSuperRowType::FArguments().Padding(0), InOwnerTableView);
}
TSharedRef<SWidget> SSkillLogItemEditor::GenerateWidgetForColumn(const FName& ColumnName)
{
const FSlateFontInfo ItemEditorFont = FCoreStyle::Get().GetFontStyle(TEXT("NormalFont"));
return SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
.AutoWidth()
[
SNew(SExpanderArrow, SharedThis(this))
.IndentAmount(16)
.ShouldDrawWires(true)
]
+ SHorizontalBox::Slot()
[
SNew(STextBlock).Font(ItemEditorFont).Text(this, &SSkillLogItemEditor::GetID).Margin(5)
];
}
FText SSkillLogItemEditor::GetID() const
{
ensure(ItemToEdit.IsValid());
return FText::FromString(*ItemToEdit.Get());
}
后续完善再添加更多例子~
UE4 Slate控件之TreeView 使用例子(一)的更多相关文章
- Winform控件学习-TreeView - ContextMenuStrip
首先,要向窗体添加一个TreeView控件: 然后再添加一个ContextMenuStrip控件: 接下就要给TreeView添加一个MouseDown事件,代码如下: Example 1 priva ...
- Winform控件学习-TreeView
转自 http://www.cnblogs.com/zxlovenet/p/3589425.html 作者: 初行 TreeView控件用来显示信息的分级视图,如同Windows里的资源管理 ...
- Winform开发常用控件之TreeView菜单导航和权限用法
TreeView一个很棒的控件,我们在做WEB开发时常常犯困的一个东东.当然这里介绍winform里面的用法唠. 先介绍几个属性吧,CheckBoxes设置为true的话树形节点前面会出现checkb ...
- WPF中常用控件(TreeView, ComboBox, DataGrid, ListView)使用MVVM模式绑定的demo
之前几篇关于TreeView的博客中只是贴了源代码,并没有把整个项目上传到github.最近就想着把我常用的几个控件做成一个demo,这样也方便自己以后查看.本人也是WPF新手,但是我并没有打算就往这 ...
- jQuery Validate 验证,校验规则写在控件中的具体例子
将校验规则写到控件中 <script src="../js/jquery.js" type="text/javascript"></scrip ...
- wxPython缩放图片控件的一个小例子
前几天写程序的时候,想有个自适应的图片控件,但是一直没有找到合适的解决方案.今天终于解决了这个问题,发在这里,以供参考. 程序截图: 文件下载地址: http://files.cnblogs.com/ ...
- C#控件之TreeView
设置属性 treeView1.HideSelection = false; 当控件没有焦点时仍然突出显示 默认显示色为灰色 设置属性 treeView1.DrawMode = TreeViewD ...
- 安卓界面控件屏幕居中Layout例子
经典的登录界面例子: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...
- [UE4]子控件Child Widget顶层容器选择
如果父级容器是Canvas,则可以直接设置尺寸.放到其他widget的时候也会保持设定好的尺寸(而不管父容器是什么类型).
随机推荐
- C#进阶学习4--反射(Reflection)
一.反射的定义 审查元数据并收集关于它的类型信息的能力. 二.基础概念 (1)Assembly:定义和加载程序集,加载在程序集中的所有模块以及从此程序集中查找类型并创建该类型的实例. (2)Modul ...
- hdu1232 并查集总结
前言 在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中. 这一类问题其特点是看似并 ...
- IDEA搭建一个SpringBoot项目——十分详细(web+mysql)
前排提示: IDEA版本:IntelliJ IDEA 2021.1.1 专业版(是否为专业版影响不大) 搭建目的:前端web页面能够获取到MySQL数据库中的数据 详细步骤: 1. 创建一个新项目 ...
- 关于Word转Markdown的工具Typora安装及使用
简介 Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别.即时渲染使得你写Markdown就想是写Word文档一样流畅自如,不像其他编 ...
- 01 Linux系统配置初始化
#/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin # 更改主机名 # hostnam ...
- 【译】Go:程序如何恢复?
原文:https://medium.com/a-journey-with-go/go-how-does-a-program-recover-fbbbf27cc31e 当程序不能正确处理错误时, 会 ...
- Pandas高级教程之:GroupBy用法
Pandas高级教程之:GroupBy用法 目录 简介 分割数据 多index get_group dropna groups属性 index的层级 group的遍历 聚合操作 通用聚合方法 同时使用 ...
- CA和SSL证书介绍
一.什么是CA? CA是证书的签发机构,它是公钥基础设施(Public Key Infrastructure,PKI)的核心.CA是负责签发证书.认证证书.管理已颁发证书的机关.CA 拥有一个证书(内 ...
- 简单DOS命令
1.nslookup命令 nslookup命令是用来解析域名的,举个例子:我们只知道百度的域名是www.baidu.com 想要知道它的ip的话就要使用nslookup命令了nslookup www. ...
- Helm Template初体验,方便管理多环境
我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~ 1 简介 Helm作为一个优秀的包管理器,这部分我们之前已经做了介绍,文章如下: 用Helm部署Ku ...