Unreal Engine动态添加Button实例

  1. 在控件蓝图中添加容器,注意命名不要有中文
  2. C++代码中找到容器实例

    1

    2

    3

    4

    5

    6

    7

    8

    UVerticalBox* verticalBox = Cast<UVerticalBox>(CurrentWidget->GetWidgetFromName(TEXT("VerticalBox_0")));

    if (verticalBox != nullptr)

    {

        UScrollBox* ScrollBox = Cast<UScrollBox>(CurrentWidget->GetWidgetFromName(TEXT("ScrollBox_0")));

    }

    else {

        UE_LOG(LogTemp, Warning, TEXT("verticalBox is not find"));

    }

  3. 创建Button实例,设置标题,绑定点击事件

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    UVRVIUButton* Button = NewObject<UVRVIUButton>(this);

    UTextBlock* ButtonText = NewObject<UTextBlock>(this);

    ButtonText->SetJustification(ETextJustify::Left);

    ButtonText->SetColorAndOpacity(FSlateColor(FLinearColor::Black));

    ScrollBox->AddChild(Button);

    UPanelSlot* Slot = Button->Slot;

    if (Slot)

    {

        UCanvasPanelSlot* ButtonSlot = Cast<UCanvasPanelSlot>(Slot);

        if (ButtonSlot) {

            ButtonSlot->SetAutoSize(true);

        }

    }

    //原始Button事件绑定,项目中用到的是自定义Button

    //Button->OnClicked.AddDynamic(this, &ALandMasterGameMode::OnButtonClicked1);

    //Button->OnClicked.AddDynamic(Button, &UVRVIUButton::HandleButtonClicked);

    Button->OnVRVIUButtonClicked.AddDynamic(this, &ALandMasterGameMode::OnButtonClicked);

    FString btnText = FString::Printf(TEXT("%s-%s"), *itemHolder->name, *itemHolder->intranet_ip);

    ButtonText->SetText(FText::FromString(btnText));

    Button->AddChild(ButtonText);

    Button->ButtonID = itemHolder->room_id;

    Button->AdditionalParameter = itemHolder->intranet_ip;

    UButtonSlot* ButtonSlot = Cast<UButtonSlot>(ButtonText->Slot);

    if (ButtonSlot) {

        ButtonSlot->SetPadding(FMargin(0.f, ButtonSlot->Padding.Top,0.f, ButtonSlot->Padding.Bottom));

    }

  4. 创建点击事件

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    void ALandMasterGameMode::OnButtonClicked(int32 ButtonID,  FString AdditionalParameterr) {

        UE_LOG(LogTemp, Warning, TEXT("On Button Clicked roomId is %d, ipAdress is %s"), ButtonID, *AdditionalParameterr);

        this->IntranetIP = AdditionalParameterr;

        if (nullptr != CurrentWidget)

        {

            //通过代码调用Button点击事件

            UButton* btn = Cast<UButton>(CurrentWidget->GetWidgetFromName(TEXT("ConnectButton")));

            if (btn != nullptr)

            {

                btn->OnClicked.Broadcast();

            }

            else {

                UE_LOG(LogTemp, Warning, TEXT("verticalBox is not find"));

            }

        }

    }

相关推荐

  1. MFC如何动态创建button按钮并添加点击事件

    2024-05-01 15:38:03       63 阅读
  2. 如何在three.js中添加一个button

    2024-05-01 15:38:03       51 阅读
  3. 【Android】动态添加 Fragment

    2024-05-01 15:38:03       60 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 15:38:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 15:38:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 15:38:03       82 阅读
  4. Python语言-面向对象

    2024-05-01 15:38:03       91 阅读

热门阅读

  1. 认识产品经理

    2024-05-01 15:38:03       29 阅读
  2. 软设之进程的状态

    2024-05-01 15:38:03       25 阅读
  3. AForge.NET是啥

    2024-05-01 15:38:03       37 阅读
  4. Falsk简介

    2024-05-01 15:38:03       30 阅读
  5. 注解式开发Spring

    2024-05-01 15:38:03       33 阅读
  6. mysql中的索引

    2024-05-01 15:38:03       33 阅读
  7. 数据库语法复习

    2024-05-01 15:38:03       31 阅读
  8. Redis:三种启动方式

    2024-05-01 15:38:03       30 阅读
  9. 虚拟机中new指令的秘密

    2024-05-01 15:38:03       40 阅读
  10. stm32mp135d u-boot 引导流程

    2024-05-01 15:38:03       34 阅读
  11. Python如何实现抽象工厂模式

    2024-05-01 15:38:03       34 阅读
  12. 每日算法之二叉树的层序遍历

    2024-05-01 15:38:03       34 阅读
  13. 【笔试题汇总】美团笔试题题解 第五场 2024.4.27

    2024-05-01 15:38:03       28 阅读