UE4 Total Reflection Zero Coupling Notes-UMG and C++ Interaction

1. Create Widget

//创建Widget方法一:CreateWidget
//UXXXWidgetClass是UClass
UXXXWidget* XWidget = CreateWidget< UXXXWidget >(GetWorld(),UXXXWidgetClass);

//创建Widget方法二 : 通过WidgetThree创建组件,只能在Widget内部创建
UImage* DynImage = WidgetTree->ConstructWidget<UImage>(UImage::StaticClass());

2, Get UI controls

//获取方式一:强转子集
	UCanvasPanel*  RootPanel = Cast<UCanvasPanel>(GetRootWidget());
	if (RootPanel)
	{
    
    
		UImage*  BGImage = Cast<UImage>(RootPanel->GetChildAt(0));
	}

//获取控件方法二: GetWidgetFromName
	UButton* ButtonTwo = (UButton*)GetWidgetFromName(TEXT("ButtonTwo"));

	//获取控件方法三 : 反射绑定, 变量名和UMG里的控件名要一致
	UPROPERTY(Meta = (BindWidget))
		UButton* ButtonOne;

3. Bind button events

//绑定按钮事件方法一 :	__Internal_AddDynamic
	ButtonOne->OnClicked.__Internal_AddDynamic(this, &UFWAffectWidget::ButtonOneEvent, FName("ButtonOneEvent"));

//绑定按钮事件方法二 :  FScriptDelegate
	FScriptDelegate ButTwoDel;
	ButTwoDel.BindUFunction(this, "ButtonTwoEvent");
	ButtonTwo->OnReleased.Add(ButTwoDel);

//绑定按钮方法三 : BlueprintCallable函数

4. Add and delete components

//添加组件
UUserWidget->AddChild***
//移除组件
UUserWidget ->RemoveChild(DynImage);
UUserWidget ->RemoveFromParent();

Guess you like

Origin blog.csdn.net/qq_41363459/article/details/111466278