1.6 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			1.6 KiB
		
	
	
	
	
	
	
	
title, date, tags, rating
| title | date | tags | rating | 
|---|---|---|---|
| STreeView与STableRow | 2022-08-09 13:55:15 | Slate | ⭐️ | 
STreeView
参考网址:UE4 STreeView的使用和示例(C++实现)
- RequestTreeRefresh 更新树形结构
 
TreeView鼠标多选功能
代码位于:STableRow.h的OnMouseButtonDown()。它作用是按住Ctrl 或者Shift时按下方向键可以多选物体。
DragDrop机制
STreeView的拖拽事件会先在STableRow相应:
- OnDragDetected():检测到拖拽事件。
 - OnDragEnter():鼠标(拖拽状态)进入。
 - OnDragLeave():鼠标(拖拽状态)离开。
 - OnDragOver():鼠标拖拽物体过来。
 - OnDrop:拖拽结束。
 
拖拽操作类都继承自FDragDropOperation,并调用类中的New函数来填充数据。并在对应的Event中获取到数据。
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()