.obsidian
.vs
00-MOC
01-Diary
02-Note
03-UnrealEngine
Animation
Editor
Gameplay
AI
Animation
Code
Debug
GAS
Gameplay
Http
Lyra
Mass
Online
Other
PuerTS
UObject
UnrealSpecifiers
Flags
Meta
Actor
AnimationGraph
Asset
Blueprint
Component
Config
Container
Debug
DetailsPanel
Development
Enum
GAS
Material
Niagara
Numeric
Object
Path
Pin
RigVM
Scene
Script
Sequencer
Serialization
SparseDataType
String
AllowedCharacters
GetOptions
MaxLength
MultiLine
MultiLine.md
Untitled.png
PasswordField
PropertyValidator
GetKeyOptions.md
GetValueOptions.md
Struct
TypePicker
UHT
Widget
Meta.md
Specifier
UnrealSpecifiers.md
Ue4 c++ UProperty反射 PostEditChangeProperty.md
Ue4Object生命周期.jpg
大钊提供的一种获取UE Private函数的方法.md
Vehicle
LevelScene
Math
Mobile
Physical
Plugins
Rendering
Sequence
UI
VirtualProduction
VisualEffect
卡通渲染相关资料
性能优化
流程管理与部署
.keep
03-UnrealEngine.md
04-ComputerGraphics
05-SDHGame
06-DCC
07-Other
08-Assets
09-Templates
.gitattributes
.gitignore
.gitmodules
LICENSE
2.1 KiB
2.1 KiB
MultiLine
- 功能描述: 使得文本属性编辑框支持换行。
- 使用位置: UPROPERTY
- 引擎模块: String/Text Property
- 元数据类型: bool
- 限制类型: FName/FString/Fext
- 常用程度: ★★★★★
使得文本属性编辑框支持换行。换行后的字符串以”\r\n”分隔换行。
测试代码:
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。
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;
}
}