70 lines
2.4 KiB
Markdown
Raw Normal View History

2024-10-12 17:19:46 +08:00
# HideInDetailPanel
- **功能描述:** 在Actor的事件面板里隐藏该动态多播委托属性。
- **使用位置:** UPROPERTY
- **引擎模块:** DetailsPanel
- **元数据类型:** bool
- **限制类型:** Actor里的动态多播委托
- **常用程度:** ★★
在Actor的事件面板里隐藏该动态多播委托属性。
## 测试代码:
```cpp
UCLASS(BlueprintType,Blueprintable)
class INSIDER_API AMyProperty_HideInDetailPanel :public AActor
{
GENERATED_BODY()
public:
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnMyHideTestEvent);
UPROPERTY(BlueprintAssignable, Category = "Event")
FOnMyHideTestEvent MyEvent;
UPROPERTY(BlueprintAssignable, Category = "Event", meta = (HideInDetailPanel))
FOnMyHideTestEvent MyEvent_HideInDetailPanel;
};
```
## 测试效果:
测试步骤是在蓝图里创建AMyProperty_HideInDetailPanel 的子类然后观察Event的显示情况。
可见MyEvent会显示在Class Defautls里的Events而MyEvent_HideInDetailPanel则没有显示。
不过MyEvent_HideInDetailPanel依然是可以在蓝图里进行绑定只不过默认没显示在UI上而已。
![Untitled](Untitled.png)
## 原理:
先判断没有这个标记然后创建相应的UI控件。
```cpp
void FActorDetails::AddEventsCategory(IDetailLayoutBuilder& DetailBuilder)
{
IDetailCategoryBuilder& EventsCategory = DetailBuilder.EditCategory("Events", FText::GetEmpty(), ECategoryPriority::Uncommon);
static const FName HideInDetailPanelName("HideInDetailPanel");
// Find all the Multicast delegate properties and give a binding button for them
for (TFieldIterator<FMulticastDelegateProperty> PropertyIt(Actor->GetClass(), EFieldIteratorFlags::IncludeSuper); PropertyIt; ++PropertyIt)
{
FMulticastDelegateProperty* Property = *PropertyIt;
// Only show BP assiangable, non-hidden delegates
if (!Property->HasAnyPropertyFlags(CPF_Parm) && Property->HasAllPropertyFlags(CPF_BlueprintAssignable) && !Property->HasMetaData(HideInDetailPanelName))
{}
}
}
void FBlueprintDetails::AddEventsCategory(IDetailLayoutBuilder& DetailBuilder, FName PropertyName, UClass* PropertyClass)
{
static const FName HideInDetailPanelName("HideInDetailPanel");
// Check for multicast delegates that we can safely assign
if ( !Property->HasAnyPropertyFlags(CPF_Parm) && Property->HasAllPropertyFlags(CPF_BlueprintAssignable) &&
!Property->HasMetaData(HideInDetailPanelName) )
}
```