Widget Component Get Widget works and then fails

Unreal 4.27.2

Hi,

I’m having an issue where a reference to a UUserWidget in a Widget Component returns a valid pointer at begin play but then the pointer is null despite being a UPROPERTY()

.h file

  UPROPERTY(EditDefaultsOnly)
    UWidgetComponent*_MusicSheetWidgetComponent{nullptr};

    UPROPERTY()
    UPzUserWidget_MusicSheet*_MusicSheetWidget{nullptr};

.cpp file

APzMusicStand::APzMusicStand()
{
 	
	PrimaryActorTick.bCanEverTick = true;

    USceneComponent* rootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
    SetRootComponent(rootComponent);

    _CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComponent"));
    _CameraComponent->SetupAttachment(rootComponent);

    _PianoStand=CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Piano Stand"));
    _PianoStand->SetupAttachment(rootComponent);
    
    _MusicSheetWidgetComponent=CreateDefaultSubobject<UWidgetComponent>(TEXT("Partition Widget Component"));
    

    _InstrumentChildActorComponent=CreateDefaultSubobject<UChildActorComponent>(TEXT("Music Instrument"));
    _InstrumentChildActorComponent->SetupAttachment(rootComponent);
    
    
    

}


void APzMusicStand::BeginPlay()
{
	Super::BeginPlay();

    SetMusicSheetWidget();

    
    
	
}

void APzMusicStand::SetMusicSheetWidget()
{
    _MusicSheetWidget=Cast<UPzUserWidget_MusicSheet>(_MusicSheetWidgetComponent->GetWidget());

    //THIS IS WORKING, PTR IS VALID. CALLED AT BEGIN PLAY
    
    if(_MusicSheetWidget==nullptr)
    {
        UE_LOG(LogTemp,Warning,TEXT("Begin play widget NOT SET"));
    }
    else
    {
        UE_LOG(LogTemp,Warning,TEXT("Begin play widget IS SET"));
    }

   
}

void APzMusicStand::SetExerciceMusicSheet(UPzMusicSheetDataAsset* OutMusicSheet)
{

    //HERE PTR IS NULL, EVEN TRYING TO RE DO THE CAST DOES NOT WORK.
    //WIDGET COMPONENT IS VALID AT THIS STAGE
    
    //_MusicSheetWidget=Cast<UPzUserWidget_MusicSheet>(_MusicSheetWidgetComponent->GetUserWidgetObject());

    if(_MusicSheetWidget==nullptr)
    {
        UE_LOG(LogTemp,Warning,TEXT("Widget is not set"));
    }
    else
    {
        UE_LOG(LogTemp,Warning,TEXT("Good widget IS SET"));
        _MusicSheetWidget->SetExerciceSheet(OutMusicSheet);
    }

}

Thanks

EDIT:

Adding setup attachement and register does not solve the issue, the widget is found at begin play and just after its pointer returns null. The widget component stays valid.

_MusicSheetWidgetComponent=CreateDefaultSubobject<UWidgetComponent(TEXT("Partition Widget Component"));
    _MusicSheetWidgetComponent->SetupAttachment(rootComponent);
    _MusicSheetWidgetComponent->RegisterComponent();

Ok now by digging a bit more here’s what I found :

On the Tick, the widget ptr is valid.

When called to fire a function, it’s nullptr.

I’m running out of ideas on why this is happening.