UUserWidget纯c++创建,视口不可见

问题描述 投票:0回答:1

使用纯c++创建一个c++ UUserWidget,无法在Viewport中显示!

1.当我使用c++ create时,它没有显示,但一切都可以工作,比如调用这个类函数。 我已经检查了此小部件的任何可见性、bEnable 或任何状态,一切都很好!

            UCanvasWidget* Instance = CreateWidget<UCanvasWidget>(World, UCanvasWidget::StaticClass(), FName("1.UUserWidget"));
            Instance->RootPanel = Instance->WidgetTree->ConstructWidget<UCanvasPanel>(UCanvasPanel::StaticClass(),FName("2.CanvasPanel"));
            UImage* Image = Instance->WidgetTree->ConstructWidget<UImage>(UImage::StaticClass(),FName("3.UImage"));
            Instance->RootPanel->AddChild(Image);
            Instance->WidgetTree->RootWidget = Instance->RootPanel;
            Instance->AddToViewport();

2.我使用蓝图继承我的类:

UCanvasWidget:UUserWidget
,它可以正常显示uimage图形或添加的UWidget元素。

最后:我猜这是 bp 和 c++ 之间的问题,bp 已经解决了其他一些看不见的步骤来实现它! 有什么想法吗,我的天才朋友?

c++ unreal-engine5 unreal-umg
1个回答
0
投票

解决它。 UUserWidget 必须重写 UUserWidget::RebuildWidget()

你必须在里面设置一个rootwidget,否则它会自动创建一个空内容

    // Add the first component to the root of the widget surface.
    TSharedRef<SWidget> UserRootWidget = WidgetTree->RootWidget ? WidgetTree->RootWidget->TakeWidget() : TSharedRef<SWidget>(SNew(SSpacer));
© www.soinside.com 2019 - 2024. All rights reserved.