c++ - 为什么虚幻引擎中的变量为空?

标签 c++ c++11 pointers casting unreal-engine4

我想调用函数,它会更改小部件内的文本。

有一个虚拟函数NativeConstruct,它会自动调用。它会更改小部件的文本,但我需要调用函数 F1 并向它发送一个我想要显示的文本。但是当我调用它时,变量Namenullptr。由于某些原因,当程序调用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));
   }
}

enter image description here

enter image description here

最佳答案

您的 UPROPERTY Name 一开始没有初始化为 nullptr。因此,它可能包含 any garbage value inside it .

在类定义或UAccessWidgetFromCpp(如果有)的构造函数中将其初始化为nullptr。例如,这将解决问题

UPROPERTY(BlueprintReadOnly, meta = (BindWidget))
class UTextBlock* Name = nullptr;
//                     ^^^^^^^^^^

关于新的更新:

首先,你应该avoid using c-style casting in C++ .其次,函数GetWidgetFromName返回与给定名称对应的 uobject 小部件。因此,您应该确保使用“Name”。

否则,通过仔细检查 nullptr 场景来确保您的代码安全。

if(auto widget = dynamic_cast<UTextBlock*>(GetWidgetFromName(TEXT("Name")))) 
{
    Name = widget;
    Name->SetText(FText::FromString(text));
}

即使现在您还没有到达 Name->SetText(FText::FromString(text)); 行,这意味着您没有名为“Name”的小部件或无法将 UWidget* 转换为 UTextBlock*。您可能需要重新设计如何执行此操作。

关于c++ - 为什么虚幻引擎中的变量为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63213610/

相关文章:

c++ - bool变量值如何等于5?

c++ - 非贪婪 C++ 正则表达式的问题

c++ - 使用派生类的数据成员初始化基类

c - 使用指针时类型不兼容

c - 取消引用指向不完整类型的指针。返回结构指针

c++ - std::vector<> 使用不初始化基元和转发 construct_back 的 resize() 派生

c++ - 如何使用 WSASend() 和 IOCP 模拟阻塞 send()?

c++ - 有没有更短的方法来获得两个字符串的交集和并集?

c++ - 有没有办法在全局命名空间中调用类?

C++ 结构指针