UE4 藍圖與C++交互 UserWidget


1.C++聲明函數,藍圖實現該函數,C++調用

  首先,在C++類中聲明一個方法,使用BlueprintImplementableEvent標識該方法為藍圖實現事件;

    /*此函數可以在藍圖或關卡藍圖圖表內進行重載*/
    UFUNCTION(BlueprintImplementableEvent, Category="SplineMesh")
    void PrintMessage(const FString &Message)

  其次,新建一個藍圖繼承此類,並重載PrintMessage函數

 

圖片引用自:https://blog.csdn.net/qq992817263/article/details/52571678

 

2.C++聲明函數,並添加默認實現,藍圖可實現,可不實現,如未實現,則使用C++默認實現方法

//C++實現默認版本,藍圖可override實現

UFUNCTION(BlueprintNativeEvent, Category="NativeEvent")

void FuncNativeBPEvent();

C++實現該函數時,函數名稱要加上“_Implementation”,如下:

void FuncNativeBPEvent_Implementation()
{
  // 函數具體實現  
}

 

3.C++ 調用純藍圖方法

 C++ 可以通過命令行的方式調用藍圖實現的方法並傳遞參數,當然,前提是你能夠獲取到擁有這個方法的對象(DCRLabelWidget);下面例子中,我們調用DCRLabelWidget對象的名為SetName的方法,並傳入參數“0011”.

#include "Misc/OutputDeviceDebug.h"

FString FieldName = TEXT("0011");
FString cmd = TEXT("SetName ")+ FieldName;
FOutputDeviceDebug device;
DCRLabelWidget->CallFunctionByNameWithArguments(*cmd, device, NULL, true);

 

4.C++獲取藍圖UserWidget內部控件

  假設UI_Label為我們藍圖創建的UserWidget,內部有一個名為Btn_OnClick的Button組件,可以通過如下方式,找到這個Button對象,並給該button綁定點擊事件。

// UserWidget綁定2D screen模式下的點擊事件
        if (UButton* ButtonOnClick = Cast<UButton>(UI_Label->GetWidgetFromName(TEXT("Btn_OnClick"))))//Button_OnClick
        {
            FScriptDelegate ButtonOnClickDelegate;
            ButtonOnClickDelegate.BindUFunction(this, "LabelOnClickCallBack");
            ButtonOnClick->OnClicked.Add(ButtonOnClickDelegate);
        }

 

5.C++獲取藍圖屬性,及向藍圖屬性賦值

// 從DCRLabelWidget讀取Float類型屬性PX
for (TFieldIterator<FFloatProperty> StrProperty(DCRLabelWidget->GetClass()); StrProperty; ++StrProperty)
    {
        if (StrProperty->GetName().Contains(TEXT("PX")))
        {
            AbsoluteSizeX = StrProperty->GetPropertyValue_InContainer(DCRLabelWidget);
            break;
        }
    }

 

// DCRLabelWidget 為要設置屬性的UserWidget對象,這里以float類型屬性為例
for (TFieldIterator<FFloatProperty> StrProperty(DCRLabelWidget->GetClass()); StrProperty; ++StrProperty)
{
    // 屬性名稱為SizeX
 if (StrProperty->GetName().Contains(TEXT("SizeX")))
 {
  StrProperty->SetPropertyValue_InContainer(DCRLabelWidget, AbsoluteSizeX);
    break;
 }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM