Programming default widget in C++

I’m trying to create a new HUD for most of common levels in my game; it must to see like this:

As you can see i can handle it as a BP widget, it is no so hard, but i want to do it in c++. So, first i created a new HUD class by mistake that has the next code:

// Create buttons and set them in a slot
    UButton* HomeButton = WidgetTree->ConstructWidget<UButton>(UButton::StaticClass(), FName("Home_Button"));
    HomeButton->WidgetStyle.Normal.SetResourceObject(Cast<UObject>(HomeIconTexture));
    HomeButton->WidgetStyle.Normal.SetImageSize(FVector2D(80.f, 80.f));
    HomeButton->WidgetStyle.Normal.Margin = 0.f;
    // HomeButton->SetColorAndOpacity(FLinearColor(1.f, 1.f, 1.f, 0));

    UCanvasPanelSlot* HomeButtonSlot = Cast<UCanvasPanelSlot>(HomeButton->Slot);
    HomeButtonSlot->SetAnchors(FAnchors(.0f, .0f, .0f, .0f));
    HomeButtonSlot->SetSize(FVector2D(80.f, 80.f));
    HomeButtonSlot->SetPosition(FVector2D(80.f, 80.f));
    //HomeButtonSlot->SetAlignment(FVector2D(.5f, .5f));
    
    UButton* MenuButton = WidgetTree->ConstructWidget<UButton>(UButton::StaticClass(), FName("Menu_Button"));
    MenuButton->WidgetStyle.Normal.SetResourceObject(Cast<UObject>(MenuIconTexture));
    MenuButton->WidgetStyle.Normal.SetImageSize(FVector2D(80.f, 80.f));
    MenuButton->WidgetStyle.Normal.Margin = 0.f;

    UCanvasPanelSlot* MenuButtonSlot = Cast<UCanvasPanelSlot>(MenuButton->Slot);
    MenuButtonSlot->SetAnchors(FAnchors(0, 0, 1.f, 1.f));
    MenuButtonSlot->SetSize(FVector2D(80.f, 80.f));
    MenuButtonSlot->SetPosition(FVector2D(80.f, 80.f));

    UButton* ArrowLeftButton = WidgetTree->ConstructWidget<UButton>(UButton::StaticClass(), FName("ArrowLeft_Button"));
    ArrowLeftButton->WidgetStyle.Normal.SetResourceObject(Cast<UObject>(ArrowLeftIconTexture));
    ArrowLeftButton->WidgetStyle.Normal.SetImageSize(FVector2D(80.f, 80.f));
    ArrowLeftButton->WidgetStyle.Normal.Margin = 0.f;

    UCanvasPanelSlot* ArrowLeftButtonSlot = Cast<UCanvasPanelSlot>(ArrowLeftButton->Slot);
    ArrowLeftButtonSlot->SetAnchors(FAnchors(1.f, 1.f, 0, 0));
    ArrowLeftButtonSlot->SetSize(FVector2D(80.f, 80.f));
    ArrowLeftButtonSlot->SetPosition(FVector2D(80.f, 80.f));

    UButton* ArrowRightButton = WidgetTree->ConstructWidget<UButton>(UButton::StaticClass(), FName("ArrowRight_Button"));
    ArrowRightButton->WidgetStyle.Normal.SetResourceObject(Cast<UObject>(ArrowRightIconTexture));
    ArrowRightButton->WidgetStyle.Normal.SetImageSize(FVector2D(80.f, 80.f));
    ArrowRightButton->WidgetStyle.Normal.Margin = 0.f;
    
    UCanvasPanelSlot* ArrowRightButtonSlot = Cast<UCanvasPanelSlot>(ArrowRightButton->Slot);
    ArrowRightButtonSlot->SetAnchors(FAnchors(1.f, 1.f, 1.f, 1.f));
    ArrowRightButtonSlot->SetSize(FVector2D(80.f, 80.f));
    ArrowRightButtonSlot->SetPosition(FVector2D(80.f, 80.f));

    Canvas->DrawItem();

I realized, searching here in the site, that i need to create my Widget and building it in the HUD c++ class, as we do in the level’s BP; it means i need to move that code to the Widget.

So, i created my widget class:

UCLASS()
class BOOKDEMO_API ULectureWidget : public UUserWidget
{
	GENERATED_BODY()

public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (BindWidget))
class UButton* HomeButton;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (BindWidget))
class UButton* MenuButton;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (BindWidget))
class UButton* ArrowLeftButton;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (BindWidget))
class UButton* ArrowRightButton;


protected:
	virtual void NativeConstruct() override;
	
};

Four buttons that i need. But i don’t get how must i to initialize the buttons.

In my second reference there is an idea how to do this, but i don’t get what is WidgetTree, can anyone explain me it?

My problem is that i don’t know how should i init the widget’s elements using C++, i cannot find a satisfactory answer. I know we can do this creating the widget’s BP and calling it from the HUD class, but i want to do it full c++, how can i do that?

Update 1:
This is my code from trying to do it fully c++: [code][2]. Unfortunately, [it does not work][3].

My referecens:

Look for this tutorial, it may help: http://benhumphreys.ca/unreal/ui-cpp-uuserwidget/

Though it’s easier to work with UMG widgets from UE4 editor instead of making them in code.

Well, i use native construct, but how can i initialize buttons and others?

sample create button c++

auto MyButton = WidgetTree->ConstructWidget(UButton::StaticClass(), FName(*FString(“MyButton”)));

With that you can create a button. As you can see it is initialized. If you need more help let me know. I recently did it in c ++

you have to call WidgetTree from your UUserWidget class that you created. If you want to obtain the WidgetTree of your UUserWidget from any class I recommend initializing your UUserWidget from your HUD class because that way you can call your widget from any class