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 使用例子(一)的更多相关文章

  1. Winform控件学习-TreeView - ContextMenuStrip

    首先,要向窗体添加一个TreeView控件: 然后再添加一个ContextMenuStrip控件: 接下就要给TreeView添加一个MouseDown事件,代码如下: Example 1 priva ...

  2. Winform控件学习-TreeView

    转自 http://www.cnblogs.com/zxlovenet/p/3589425.html      作者: 初行 TreeView控件用来显示信息的分级视图,如同Windows里的资源管理 ...

  3. Winform开发常用控件之TreeView菜单导航和权限用法

    TreeView一个很棒的控件,我们在做WEB开发时常常犯困的一个东东.当然这里介绍winform里面的用法唠. 先介绍几个属性吧,CheckBoxes设置为true的话树形节点前面会出现checkb ...

  4. WPF中常用控件(TreeView, ComboBox, DataGrid, ListView)使用MVVM模式绑定的demo

    之前几篇关于TreeView的博客中只是贴了源代码,并没有把整个项目上传到github.最近就想着把我常用的几个控件做成一个demo,这样也方便自己以后查看.本人也是WPF新手,但是我并没有打算就往这 ...

  5. jQuery Validate 验证,校验规则写在控件中的具体例子

    将校验规则写到控件中 <script src="../js/jquery.js" type="text/javascript"></scrip ...

  6. wxPython缩放图片控件的一个小例子

    前几天写程序的时候,想有个自适应的图片控件,但是一直没有找到合适的解决方案.今天终于解决了这个问题,发在这里,以供参考. 程序截图: 文件下载地址: http://files.cnblogs.com/ ...

  7. C#控件之TreeView

    设置属性  treeView1.HideSelection = false;  当控件没有焦点时仍然突出显示 默认显示色为灰色 设置属性  treeView1.DrawMode = TreeViewD ...

  8. 安卓界面控件屏幕居中Layout例子

    经典的登录界面例子: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  9. [UE4]子控件Child Widget顶层容器选择

    如果父级容器是Canvas,则可以直接设置尺寸.放到其他widget的时候也会保持设定好的尺寸(而不管父容器是什么类型).

随机推荐

  1. kubernetes获取崩溃容器/上一个容器的应用日志

    kubectl logs命令将显示当前容器的日志.当你想知道为什么前一个容器终止时,你想看到的是前一个容器的日志,而不是当前容器的.可以通过添加--previous选项来完成: $ kubectl l ...

  2. Windows10 上Docker 安装运行Consul

    背景简介 Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面. 这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格. Consul需要数据平面并 ...

  3. 66.QT-线程并发、QTcpServer并发、QThreadPool线程池

    1.线程并发一个程序内部能拥有多个线程并行执行.一个线程的执行可以被认为是一个CPU在执行该程序.当一个程序运行在多线程下,就好像有多个CPU在同时执行该程序.总之,多线程即可以这么理解:多线程是处理 ...

  4. Centos7.5使用SSH密钥登录

    12.1.查看操作系统版本 # cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 12.2.在服务器端创建密钥 # ssh-ke ...

  5. 14、oracle sql语法

    14.0.注释: 1.单行注释:-- 2.多行注释:/* */ 14.1.sqlplus中的set指令: 1.设置每行显示的数据长度: SET LINESIZE 500; #有效范围是1-32767, ...

  6. Java+Selenium 上传文件,点击选择“浏览文件”按钮,报错invalid argument

    Java+Selenium 上传文件,点击选择"浏览文件"按钮,报错invalid argument 解决代码: Actions action=new Actions(driver ...

  7. 正则表达式_爬取豆瓣电影排行Top250

    前言: 利用简单的正则表达式,获取响应内容爬取数据. Part1 正则表达式(Regular Expression) 1.1 简介 正则表达式,又称规则表达式,它是一种文本模式,就是通过事先定义好的一 ...

  8. webpack(3)基础的打包过程

    没有配置文件的打包 如果我们没有使用配置文件webpack.config.js,那么我们就需要通过命令来打包 案例 我们首先创建一个webpackTest文件夹,然后在文件夹中再创建2个子文件夹dis ...

  9. MyBatis框架的使用解析!数据库相关API的基本介绍

    动态SQL if 根据条件包含where子句的一部分 <select id="findActiveBlogLike" resultType="Blog"& ...

  10. kafka 安装和配置

    转载自:https://www.cnblogs.com/heijinli/p/13545182.html 下载及安装  第一步:进入kafka官网  按照自己的需求选择版本,我这里选择 最新版的 2. ...