-
在控件蓝图中添加容器,注意命名不要有中文
-
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"``));
}
| -
创建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));
}
| -
创建点击事件
|----------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 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"``));
``}
``}
}
|
Unreal Engine动态添加Button实例
ChatGPT攻城狮2024-05-01 23:09
相关推荐
困鲲鲲43 分钟前
CMake2: CMakeLists.txt的常用命令云边有个稻草人1 小时前
【C++】第二十五节—C++11 (上) | 详解列表初始化+右值引用和移动语义源代码•宸2 小时前
网络流量分析——基础知识(二)(Tcpdump 基础知识)johnZhangqi9 小时前
深圳大学-计算机信息管理课程实验 C++ 自考模拟题StudyWinter10 小时前
【C++】仿函数和回调函数君鼎11 小时前
Effective C++ 条款55:熟悉Boost库Zafir202413 小时前
Qt实现TabWidget通过addTab函数添加的页,页内控件自适应窗口大小阿巴~阿巴~13 小时前
深入解析C++非类型模板参数多吃蔬菜!!!13 小时前
vscode 搭建C/C++开发环境搭建(linux)小指纹15 小时前
河南萌新联赛2025第(六)场:郑州大学