71 lines
2.1 KiB
Markdown
71 lines
2.1 KiB
Markdown
|
# MultiLine
|
|||
|
|
|||
|
- **功能描述:** 使得文本属性编辑框支持换行。
|
|||
|
- **使用位置:** UPROPERTY
|
|||
|
- **引擎模块:** String/Text Property
|
|||
|
- **元数据类型:** bool
|
|||
|
- **限制类型:** FName/FString/Fext
|
|||
|
- **常用程度:** ★★★★★
|
|||
|
|
|||
|
使得文本属性编辑框支持换行。换行后的字符串以”\r\n”分隔换行。
|
|||
|
|
|||
|
## 测试代码:
|
|||
|
|
|||
|
```cpp
|
|||
|
UPROPERTY(EditAnywhere, Category = MultiLineTest, meta = (MultiLine = true))
|
|||
|
FString MyString_MultiLine = TEXT("Hello");
|
|||
|
|
|||
|
UPROPERTY(EditAnywhere, Category = MultiLineTest, meta = (MultiLine = true))
|
|||
|
FText MyText_MultiLine = INVTEXT("Hello");
|
|||
|
|
|||
|
UPROPERTY(EditAnywhere, Category = MultiLineTest, meta = (MultiLine = true, PasswordField = true))
|
|||
|
FString MyString_MultiLine_Password = TEXT("Hello");
|
|||
|
|
|||
|
UPROPERTY(EditAnywhere, Category = MultiLineTest, meta = (MultiLine = true, PasswordField = true))
|
|||
|
FText MyText_MultiLine_Password = INVTEXT("Hello");
|
|||
|
```
|
|||
|
|
|||
|
## 测试结果:
|
|||
|
|
|||
|
按住Shift+Enter回车换行。
|
|||
|
|
|||
|

|
|||
|
|
|||
|
## 原理:
|
|||
|
|
|||
|
原理也很简单,根据bIsMultiLine 创建特定的多行编辑控件SMultiLineEditableTextBox。
|
|||
|
|
|||
|
```cpp
|
|||
|
void SPropertyEditorText::Construct( const FArguments& InArgs, const TSharedRef< class FPropertyEditor >& InPropertyEditor )
|
|||
|
{
|
|||
|
bIsMultiLine = PropertyHandle->GetBoolMetaData(NAME_MultiLine);
|
|||
|
|
|||
|
if(bIsMultiLine)
|
|||
|
{
|
|||
|
ChildSlot
|
|||
|
[
|
|||
|
SAssignNew(HorizontalBox, SHorizontalBox)
|
|||
|
+SHorizontalBox::Slot()
|
|||
|
.FillWidth(1.0f)
|
|||
|
[
|
|||
|
SAssignNew(MultiLineWidget, SMultiLineEditableTextBox)
|
|||
|
.Text(InPropertyEditor, &FPropertyEditor::GetValueAsText)
|
|||
|
.Font(InArgs._Font)
|
|||
|
.SelectAllTextWhenFocused(false)
|
|||
|
.ClearKeyboardFocusOnCommit(false)
|
|||
|
.OnTextCommitted(this, &SPropertyEditorText::OnTextCommitted)
|
|||
|
.OnVerifyTextChanged(this, &SPropertyEditorText::OnVerifyTextChanged)
|
|||
|
.SelectAllTextOnCommit(false)
|
|||
|
.IsReadOnly(this, &SPropertyEditorText::IsReadOnly)
|
|||
|
.AutoWrapText(true)
|
|||
|
.ModiferKeyForNewLine(EModifierKey::Shift)
|
|||
|
//.IsPassword( bIsPassword )
|
|||
|
]
|
|||
|
];
|
|||
|
|
|||
|
PrimaryWidget = MultiLineWidget;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
```
|