41 lines
1.3 KiB
Markdown
Raw Normal View History

2024-10-12 17:19:46 +08:00
# ReadOnlyKeys
- **功能描述:** 使TMap属性的Key不能编辑。
- **使用位置:** UPROPERTY
- **引擎模块:** Container Property
- **元数据类型:** bool
- **限制类型:** TMap属性
- **常用程度:** ★★
使TMap属性的Key不能编辑。
意味着这个TMap里的元素是在这之前构造函数里初始化等就设置好的但我们只希望用户更改值的内容而不改Key的名字。这在某些情况下比较有用比如以Platform作为Key这样Platform的列表是固定的就不希望用户更改了。
## 测试代码:
```cpp
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = ReadOnlyKeysTest)
TMap<int32, FString> MyIntMap_NoReadOnlyKeys;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = ReadOnlyKeysTest, meta = (ReadOnlyKeys))
TMap<int32, FString> MyIntMap_ReadOnlyKeys;
```
## 测试结果:
可见MyIntMap_ReadOnlyKeys的Key是灰色的不可编辑。
![Untitled](Untitled.png)
## 源码里搜到:
```cpp
void FDetailPropertyRow::MakeNameOrKeyWidget( FDetailWidgetRow& Row, const TSharedPtr<FDetailWidgetRow> InCustomRow ) const
{
if (PropertyHandle->HasMetaData(TEXT("ReadOnlyKeys")))
{
PropertyKeyEditor->GetPropertyNode()->SetNodeFlags(EPropertyNodeFlags::IsReadOnly, true);
}
}
```