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的时候也会保持设定好的尺寸(而不管父容器是什么类型).
随机推荐
- kubernetes获取崩溃容器/上一个容器的应用日志
kubectl logs命令将显示当前容器的日志.当你想知道为什么前一个容器终止时,你想看到的是前一个容器的日志,而不是当前容器的.可以通过添加--previous选项来完成: $ kubectl l ...
- Windows10 上Docker 安装运行Consul
背景简介 Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面. 这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格. Consul需要数据平面并 ...
- 66.QT-线程并发、QTcpServer并发、QThreadPool线程池
1.线程并发一个程序内部能拥有多个线程并行执行.一个线程的执行可以被认为是一个CPU在执行该程序.当一个程序运行在多线程下,就好像有多个CPU在同时执行该程序.总之,多线程即可以这么理解:多线程是处理 ...
- Centos7.5使用SSH密钥登录
12.1.查看操作系统版本 # cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 12.2.在服务器端创建密钥 # ssh-ke ...
- 14、oracle sql语法
14.0.注释: 1.单行注释:-- 2.多行注释:/* */ 14.1.sqlplus中的set指令: 1.设置每行显示的数据长度: SET LINESIZE 500; #有效范围是1-32767, ...
- Java+Selenium 上传文件,点击选择“浏览文件”按钮,报错invalid argument
Java+Selenium 上传文件,点击选择"浏览文件"按钮,报错invalid argument 解决代码: Actions action=new Actions(driver ...
- 正则表达式_爬取豆瓣电影排行Top250
前言: 利用简单的正则表达式,获取响应内容爬取数据. Part1 正则表达式(Regular Expression) 1.1 简介 正则表达式,又称规则表达式,它是一种文本模式,就是通过事先定义好的一 ...
- webpack(3)基础的打包过程
没有配置文件的打包 如果我们没有使用配置文件webpack.config.js,那么我们就需要通过命令来打包 案例 我们首先创建一个webpackTest文件夹,然后在文件夹中再创建2个子文件夹dis ...
- MyBatis框架的使用解析!数据库相关API的基本介绍
动态SQL if 根据条件包含where子句的一部分 <select id="findActiveBlogLike" resultType="Blog"& ...
- kafka 安装和配置
转载自:https://www.cnblogs.com/heijinli/p/13545182.html 下载及安装 第一步:进入kafka官网 按照自己的需求选择版本,我这里选择 最新版的 2. ...