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"``)); ``} ``} } |

相关推荐
Zarek枫煜3 小时前
C3 编程语言 - 现代 C 的进化之选
c语言·开发语言·青少年编程·rust·游戏引擎
筱璦4 小时前
期货软件开发 - C# 调用 HQChart 指标计算 C++ 动态库
c++·microsoft·c#
不想写代码的星星4 小时前
C++ 内存管理:分区、自定义分配器、常见问题与检测工具
c++
-许平安-5 小时前
MCP项目笔记九(插件 bacio-quote)
c++·笔记·ai·plugin·mcp
沉鱼.445 小时前
第十三届题目
c语言·c++·算法
liulilittle5 小时前
C++ 无锁编程:单停多发送场景高性能方案
服务器·开发语言·c++·高性能·无锁·原子
无限进步_6 小时前
【C++】巧用静态变量与构造函数:一种非常规的求和实现
开发语言·c++·git·算法·leetcode·github·visual studio
小超超爱学习99376 小时前
大数乘法,超级简单模板
开发语言·c++·算法
xyx-3v7 小时前
qt创建新工程
开发语言·c++·qt
样例过了就是过了8 小时前
LeetCode热题100 爬楼梯
c++·算法·leetcode·动态规划