40 lines
1.6 KiB
Markdown
40 lines
1.6 KiB
Markdown
|
---
|
|||
|
title: STreeView与STableRow
|
|||
|
date: 2022-08-09 13:55:15
|
|||
|
tags: Slate
|
|||
|
rating: ⭐️
|
|||
|
---
|
|||
|
# STreeView
|
|||
|
参考网址:[UE4 STreeView的使用和示例(C++实现)](https://blog.csdn.net/wymdhr/article/details/104313596)
|
|||
|
- RequestTreeRefresh 更新树形结构
|
|||
|
|
|||
|
## TreeView鼠标多选功能
|
|||
|
代码位于:STableRow.h的OnMouseButtonDown()。它作用是按住Ctrl 或者Shift时按下方向键可以多选物体。
|
|||
|
|
|||
|
### DragDrop机制
|
|||
|
STreeView的拖拽事件会先在STableRow相应:
|
|||
|
- OnDragDetected():检测到拖拽事件。
|
|||
|
- OnDragEnter():鼠标(拖拽状态)进入。
|
|||
|
- OnDragLeave():鼠标(拖拽状态)离开。
|
|||
|
- OnDragOver():鼠标拖拽物体过来。
|
|||
|
- OnDrop:拖拽结束。
|
|||
|
|
|||
|
拖拽操作类都继承自FDragDropOperation,并调用类中的New函数来填充数据。并在对应的Event中获取到数据。
|
|||
|
```c++
|
|||
|
TSharedPtr<FDragAIGraphNode> DragNodeOp = DragDropEvent.GetOperationAs<FDragAIGraphNode>();
|
|||
|
const TArray< TSharedRef<SGraphNode> >& DraggedNodes = DragNodeOp->GetNodes();
|
|||
|
for (int32 Idx = 0; Idx < DraggedNodes.Num(); Idx++)
|
|||
|
{
|
|||
|
UAIGraphNode* DraggedNode = Cast<UAIGraphNode>(DraggedNodes[Idx]->GetNodeObj());
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
DragDrop不适用于多选的实现,所以可以使用使用给Event绑定Lambda,之后将节点实例传入进行操作。
|
|||
|
|
|||
|
### SListView的选择机制
|
|||
|
STreeView的选择实现代码位于SListView,声明于ITypedTableView.h,几个主要的接口函数为:
|
|||
|
- Private_IsItemSelected()
|
|||
|
- Private_IsItemSelectableOrNavigable()
|
|||
|
- Private_SetItemSelection()
|
|||
|
- Private_ClearSelection()
|
|||
|
- Private_SelectRangeFromCurrentTo()
|