【UE】Slate编辑器动态添加Button

前言

实现编辑器动态添加界面元素,例如button之类的

效果

在这里插入图片描述

实现

.h文件添加定义
在这里插入图片描述

.cpp文件实现逻辑

  1. 界面排版
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;
}
  1. 按钮点击
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
                     ];
       }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值