PropertyEditor的作用是对UObject进行自动布局,减少手动布局的工作量。需要在模块中引用"PropertyEditor"
效果图:
3.代码
构建UObject类 MyDetailObject.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "MyDetailObject.generated.h"
/**
*
*/
USTRUCT()
struct FMyVector {
GENERATED_USTRUCT_BODY()
public:
UPROPERTY(EditAnywhere)
FVector4 vector;
UPROPERTY(EditAnywhere)
bool bSelect;
};
UCLASS()
class PROEDITOR_API UMySecondObject :public UObject
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, meta = (UIMin = 1, UIMax = 10))//这里是UI中显示的范围
int32 Heigh= 5;
};
UCLASS()
class PROEDITOR_API UMyDetailObject : public UObject
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, meta = (UIMin = 1, UIMax = 10))//这里是UI中显示的范围
int32 CellWidth = 5;
UPROPERTY(EditAnywhere)
bool bPadToPowerOf2;
UPROPERTY(EditAnywhere)
FText editText;
UPROPERTY(EditAnywhere)
TArray<int32> monsters;
UPROPERTY(EditAnywhere)
FVector postion;
UPROPERTY(EditAnywhere)
FMyVector myVector;
};
构建完怎么显示呢?
声明 UMyDetailObject* myDetailObject;
myDetailObject = GetMutableDefault<UMyDetailObject>();
TSharedPtr<IDetailsView> DetailsView = FModuleManager::GetModuleChecked<FPropertyEditorModule>("PropertyEditor").CreateDetailView(DetailsViewArgs);
DetailsView->SetObject(myDetailObject)
return SNew(SDockTab)
.TabRole(ETabRole::NomadTab)
[
// Put your tab content here!
SNew(SBorder).BorderBackgroundColor(FLinearColor::Blue).DesiredSizeScale(FVector2D(20,40))
[
DetailsView->AsShared()
]
];
然后创建 DetailsView,将myDetailObject设置到myDetailObject中,这并不能显示出来,因为实际上显示的是SWidge,最后加入到需要显示的SWidge中就可以了。