UE4+C++开发-(四)UButton、UEditableTextBox、FString

在 Unreal Engine 的 C++ 开发中,UButtonUEditableTextBox 和 FString 是非常常用的类型,分别用于处理按钮交互、文本输入和字符串操作。以下是它们的详细说明和使用场景:

1. UButton(按钮控件)

UButton 是 Unreal 中用于处理用户点击交互的 UI 控件类,继承自 UWidget,通常在蓝图中创建 UI 后,在 C++ 中绑定事件。

核心功能
  • 点击事件:通过 OnClicked 委托响应按钮点击。
  • 状态控制:设置按钮是否可点击(SetIsEnabled(bool))、是否可见(SetVisibility(ESlateVisibility))等。
常用操作示例

cpp

运行

// 绑定按钮(假设在蓝图中命名为"LoginButton")
UButton* LoginButton = Cast<UButton>(GetWidgetFromName(TEXT("LoginButton")));

// 绑定点击事件
if (LoginButton)
{
    // 绑定点击后执行的函数(OnLoginClicked 是自定义函数)
    LoginButton->OnClicked.AddDynamic(this, &ULoginWidget::OnLoginClicked);
    
    // 设置按钮不可点击
    LoginButton->SetIsEnabled(false);
    
    // 隐藏按钮
    LoginButton->SetVisibility(ESlateVisibility::Hidden);
}

// 点击事件处理函数
void ULoginWidget::OnLoginClicked()
{
    UE_LOG(LogTemp, Log, TEXT("登录按钮被点击!"));
}

2. UEditableTextBox(可编辑文本框)

UEditableTextBox 用于接收用户输入的文本(如用户名、密码),继承自 UWidget,支持文本变化监听和输入验证。

核心功能
  • 文本获取 / 设置:通过 GetText() 获取输入文本,SetText(FText) 设置默认文本。
  • 文本变化事件:通过 OnTextChanged 或 OnTextCommitted 监听输入变化。
  • 错误提示:通过 SetError(FString) 显示错误信息(如 "密码错误")。
常用操作示例

cpp

运行

// 绑定文本框(假设在蓝图中命名为"UsernameTextBox")
UEditableTextBox* UsernameTextBox = Cast<UEditableTextBox>(GetWidgetFromName(TEXT("UsernameTextBox")));

if (UsernameTextBox)
{
    // 设置提示文本(未输入时显示)
    UsernameTextBox->SetHintText(FText::FromString(TEXT("请输入用户名")));
    
    // 设置默认文本
    UsernameTextBox->SetText(FText::FromString(TEXT("默认用户")));
    
    // 绑定文本变化事件(输入时实时触发)
    UsernameTextBox->OnTextChanged.AddDynamic(this, &ULoginWidget::OnUsernameChanged);
    
    // 显示错误提示
    UsernameTextBox->SetError(TEXT("用户名不能为空!"));
}

// 文本变化事件处理函数
void ULoginWidget::OnUsernameChanged(const FText& NewText)
{
    FString Username = NewText.ToString(); // 转换为 FString 处理
    UE_LOG(LogTemp, Log, TEXT("当前输入:%s"), *Username);
}

3. FString(字符串类型)

FString 是 Unreal 中用于处理可变字符串的类,类似 C++ 标准库的 std::string,但针对引擎做了优化,支持多平台和 Unicode。

核心特性
  • 可变长度:可动态修改内容(与不可变的 FNameFText 区分)。
  • 丰富的字符串操作:拼接、分割、查找、转换等。
  • 与其他类型转换:支持与 FText(本地化文本)、FName(高效标识符)互相转换。
常用操作示例

cpp

运行

// 初始化字符串
FString Username = TEXT("Player123");
FString Password = TEXT("123456");

// 字符串拼接
FString UserInfo = TEXT("用户:") + Username + TEXT(",密码:") + Password;
// 结果:"用户:Player123,密码:123456"

// 字符串比较(忽略大小写)
if (Username.Equals(TEXT("player123"), ESearchCase::IgnoreCase))
{
    UE_LOG(LogTemp, Log, TEXT("用户名匹配!"));
}

// 分割字符串(按换行符)
FString Data = TEXT("Alice\n123");
TArray<FString> Lines;
Data.ParseIntoArrayLines(Lines); // Lines[0] = "Alice", Lines[1] = "123"

// 与 FText 转换(FText 用于 UI 显示,支持本地化)
FText DisplayText = FText::FromString(Username); // FString → FText
FString StrFromText = DisplayText.ToString();     // FText → FString

三者协同使用场景(以登录功能为例)

  1. 通过 UEditableTextBox 获取用户输入的用户名和密码(转换为 FString 处理)。
  2. 点击 UButton 触发登录逻辑,用 FString 验证用户名密码是否正确。
  3. 验证失败时,通过 UEditableTextBox::SetError 显示错误信息(错误文本为 FString)。

例如:

cpp

运行

void ULoginWidget::OnLoginClicked()
{
    // 从文本框获取输入(FText → FString)
    FString InputUser = UsernameTextBox->GetText().ToString();
    FString InputPwd = PasswordTextBox->GetText().ToString();
    
    // 验证逻辑(使用 FString 比较)
    if (InputUser.IsEmpty() || InputPwd.IsEmpty())
    {
        UsernameTextBox->SetError(InputUser.IsEmpty() ? TEXT("用户名不能为空") : TEXT(""));
        PasswordTextBox->SetError(InputPwd.IsEmpty() ? TEXT("密码不能为空") : TEXT(""));
    }
    else
    {
        // 登录成功逻辑
    }
}

理解这三个类型的用法是开发 Unreal UI 交互功能的基础,尤其在处理用户输入、按钮交互和字符串处理时非常关键。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值