How to create c++ widget
From IML Wiki
- Create child c++ class of UserWidget c++ class.
- Create child blueprint class of created before c++ class.
- Declare button uproperty
UPROPERTY(meta = (BindWidget)) class UButton* StartGame;
- Create button with the same name as uproperty in the derived blueprint class.
- Add virtual "UUserWidget::Initialize" function with "Super::Initialize();" function inside.
- Add "Components/Button.h" header file.
- Add some "void StartButtonClicked();" function will be delegated with our button OnClickedEvent. Signatures of this function must be the same that in called event!.
- Create DynamicDelegate in the "UUserWidget::Initialize" function.
.h file
#pragma once #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include "MyUserWidget.generated.h" /** * */ UCLASS() class MYPROJECT_API UMyUserWidget : public UUserWidget { GENERATED_BODY() virtual bool Initialize(); UPROPERTY(meta = (BindWidget)) class UButton* StartGame; UFUNCTION() void StartButtonClicked(); };
.cpp file
#include "MyUserWidget.h" #include "Components/Button.h" bool UMyUserWidget::Initialize() { Super::Initialize(); StartGame->OnClicked.AddDynamic(this, &UMyUserWidget::StartButtonClicked); return true; } void UMyUserWidget::StartButtonClicked() { UE_LOG(LogTemp, Warning, TEXT("Our button is working!")); }