创建StreeView的多列样式怎么就像是创建单行单列差不多?貌似就是在单行单列中加入了多列widget?
示例代码
DetailTabWidget
#pragma once
#include "TreeViewItemBase.h"class SDetailTabWidget : public SCompoundWidget
{SLATE_BEGIN_ARGS(SDetailTabWidget){}SLATE_END_ARGS()void Construct(const FArguments& InArgs);private:TSharedPtr<SWidgetSwitcher> WidgetSwitcher;TSharedPtr<STreeView<TSharedRef<FTreeViewItemBase>>> TreeViewItem;TArray<TSharedRef<FTreeViewItemBase>> TreeViewSource;public:TSharedRef<class ITableRow> GenerateTreeViewRow(TSharedRef<FTreeViewItemBase> ItemBase, const TSharedRef< class STableViewBase >& TableViewBase);void OnGetChildren(TSharedRef<FTreeViewItemBase> ItemBase, TArray<TSharedRef<FTreeViewItemBase>>& OutChildren);void SetItemData();
};
#include "DetailTabWidget.h"#include "TreeViewItemBaseBool.h"
#include "Widgets/Layout/SWidgetSwitcher.h"void SDetailTabWidget::Construct(const FArguments& InArgs)
{ChildSlot[SAssignNew(WidgetSwitcher, SWidgetSwitcher)+SWidgetSwitcher::Slot().HAlign(HAlign_Center).VAlign(VAlign_Center)[SNew(STextBlock).Text(FText::FromString("This DetailTab Panel"))]+SWidgetSwitcher::Slot().HAlign(HAlign_Fill).VAlign(VAlign_Fill)[SAssignNew(TreeViewItem,STreeView<TSharedRef<FTreeViewItemBase>>).TreeItemsSource(&TreeViewSource)//委托,生成每一行,绑定自定义方法(事件),触发时生成.OnGenerateRow(this, &SDetailTabWidget::GenerateTreeViewRow).OnGetChildren(this,&SDetailTabWidget::OnGetChildren).HeaderRow(SNew(SHeaderRow)+SHeaderRow::Column("Name").HeaderContentPadding(FMargin(0)).FillWidth(0.4f)[SNew(SBorder).Padding(FMargin(10,5,5,5))[SNew(STextBlock).Text(FText::FromString(TEXT("名 称")))]]+SHeaderRow::Column("Value").HeaderContentPadding(FMargin(0)).FillWidth(0.4f)[SNew(SBorder).Padding(FMargin(10,5,5,5))[SNew(STextBlock).Text(FText::FromString(TEXT("属 性")))]])]];SetItemData();
}TSharedRef<class ITableRow> SDetailTabWidget::GenerateTreeViewRow(TSharedRef<FTreeViewItemBase> ItemBase,const TSharedRef<class STableViewBase>& TableViewBase)
{return SNew(SMultiTableRow, TableViewBase,ItemBase);
}void SDetailTabWidget::OnGetChildren(TSharedRef<FTreeViewItemBase> ItemBase,TArray<TSharedRef<FTreeViewItemBase>>& OutChildren)
{ItemBase->Getchildren(OutChildren);
}void SDetailTabWidget::SetItemData()
{TSharedRef<FTreeViewItemBaseBool> BoolItem = MakeShareable(new FTreeViewItemBaseBool());TreeViewSource.Add(BoolItem);TreeViewItem->RequestTreeRefresh();WidgetSwitcher->SetActiveWidgetIndex(1);}
TreeViewItemBase
#pragma once// Item
class FTreeViewItemBase : public TSharedFromThis<FTreeViewItemBase>
{
public:virtual TSharedRef<SWidget> MakeNameWidget() = 0;virtual TSharedRef<SWidget> MakeValueWidget() = 0;v