我想调用一个函数,来改变小部件内的文本。
有一个名为NativeConstruct
的virtual
函数会自动被调用。它可以改变小部件的文本,但我需要调用函数F1
并向其中传递一个text,以便显示出来。但是当我调用它时,变量Name
为nullptr
。而在程序调用NativeConstruct
时,某种原因使其不为nullptr
。
Name
是我想要更改的文本变量dialogBottom
是带有此变量的小部件的名称
已编辑
UAccessWidgetFromCpp* AccessWidgetFromCpp
= CreateWidget<UAccessWidgetFromCpp>(
GetWorld()->GetFirstPlayerController(), UAccessWidgetFromCpp::StaticClass()
);
if (AccessWidgetFromCpp)
{
AccessWidgetFromCpp->F1("222");
widgetDialogBottomInstance->AddToViewport();
}
UCLASS()
class HOME_API UAccessWidgetFromCpp : public UUserWidget
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadOnly, meta = (BindWidget))
class UTextBlock* Name = nullptr;
UFUNCTION()
void F1(FString text);
};
void UAccessWidgetFromCpp::F1(FString text)
{
if (auto widget = dynamic_cast<UTextBlock*>(GetWidgetFromName(TEXT("Name"))))
{
Name = widget;
Name->SetText(FText::FromString(text));
}
}
Name
,因为UUserWidget
类没有默认构造函数,但它仍然为空。已添加代码。 - Amazing UserGetWidgetFromName
返回与给定名称对应的 UObject Widget。你确定你有一个名为 "Name" 的 Widget 吗?你可以这样做:if(auto widget = dynamic_cast<UTextBlock*>(GetWidgetFromName(TEXT("Name")))) { Name = widget; }
这样,你将确保它已经成功转换为父类并且不是nullptr
,然后再分配给Name
。 - JeJoName
是我的文本变量,我想要更改它,而dialogBottom
是小部件的名称。但是使用这段代码后,Name
仍然为空。 - Amazing UserUWidget*
强制转换为UTextBlock*
。你可能需要重新设计如何实现这一点。 - JeJo