前言
实现编辑器动态添加界面元素,例如button之类的
效果
实现
.h文件添加定义
.cpp文件实现逻辑
- 界面排版
TSharedRef<SDockTab> FDynamicCreateToolModule::OnSpawnPluginTab(const FSpawnTabArgs& SpawnTabArgs)
{
TSharedRef<SDockTab> dockTabSharedRef =
SNew(SDockTab)
.TabRole(ETabRole::NomadTab)
[
SNew(SVerticalBox)
+ SVerticalBox::Slot()
[
SNew(SHorizontalBox)
+ SHorizontalBox::Slot()
[
SNew(SButton)
.Text(FText::FromString("Add"))
.OnClicked_Raw(this, &FDynamicCreateToolModule::AddButtonOnClick)
]
+ SHorizontalBox::Slot()
[
SNew(SButton)
.Text(FText::FromString("Remove"))
.OnClicked_Raw(this, &FDynamicCreateToolModule::RemoveButtonOnClick)
]
]
+ SVerticalBox::Slot()
[
SAssignNew(VerticalBoxPtr, SVerticalBox)
]
];
return dockTabSharedRef;
}
- 按钮点击
FReply FDynamicCreateToolModule::AddButtonOnClick()
{
ButtonCount += 1;
UpdateDynamicButtonCount();
return FReply::Handled();
}
FReply FDynamicCreateToolModule::RemoveButtonOnClick()
{
ButtonCount -= 1;
if (ButtonCount < 0)
{
ButtonCount = 0;
}
UpdateDynamicButtonCount();
return FReply::Handled();
}
void FDynamicCreateToolModule::UpdateDynamicButtonCount()
{
VerticalBoxPtr->ClearChildren();
for (int index = 0; index < ButtonCount; index++)
{
int id = index;
VerticalBoxPtr->AddSlot()
[
SNew(SButton)
.Text(FText::FromString(FString::FromInt(id)))
.OnClicked(FOnClicked::CreateLambda([id]
{
UE_LOG(LogTemp, Display, TEXT("OnClick: %d"), id);
return FReply::Handled();
}))
];
VerticalBoxPtr->AddSlot()
[
SNullWidget::NullWidget
];
}
}