エディタブルテキストボックスウィジェットについてのメモです。
他ではよく「テキストボックス」と呼んでいるコントロールですね。
UE4ではラベルのことをテキストブロックと呼び
中身を変更できるものを「エディタブルテキストボックス」としているみたいですね。
ロジカルビートさんのこのページとエンジンのソースとにらめっこしていました。
ロジカルビートさんはインプットボックスと呼んでいるようです。
【UE4】エディタ拡張(インプットボックス編)
http://logicalbeat.jp/blog/875/エディタブルテキストボックスを使うには「SEditableTextBox」クラスを使います。
~省略
+SVerticalBox::Slot()
.AutoHeight()
[
SNew(SEditableTextBox)
.Text(LOCTEXT("EditText", "SEditableTextBox。初期テキストだドン"))
.HintText(LOCTEXT("HintText", "ヒントテキスト"))
.Font(FSlateFontInfo("Veranda", 16))
.Padding(FMargin(8, 8, 8, 8))
.ForegroundColor(FSlateColor(FLinearColor(1.0f, 0.0f, 1.0f, 1.0f)))
.BackgroundColor(FSlateColor(FLinearColor(1.0f, 1.0f, 0.0f, 1.0f)))
//.IsReadOnly(true)
//.ReadOnlyForegroundColor(FSlateColor(FLinearColor(0.0f, 1.0f, 1.0f, 1.0f)))
//.IsPassword(true)
.SelectAllTextWhenFocused(true)
.RevertTextOnEscape(true)
.ClearKeyboardFocusOnCommit(false)
.IsCaretMovedWhenGainFocus(true)
.OnTextCommitted_Raw(this, &FUtilityModule::OnEditableTextBoxCommited)
.OnTextChanged_Raw(this, &FUtilityModule::OnEditableTextBoxCommited, ETextCommit::Default)
]
~省略
void FUtilityModule::OnEditableTextBoxCommited(const FText& InText, ETextCommit::Type InCommitType) const
{
switch(InCommitType){
case ETextCommit::Default:
break;
case ETextCommit::OnEnter:
UE_LOG(LogTemp, Log, TEXT("エンター"))
break;
case ETextCommit::OnUserMovedFocus:
UE_LOG(LogTemp, Log, TEXT("フォーカス移動"))
break;
case ETextCommit::OnCleared:
UE_LOG(LogTemp, Log, TEXT("クリア"))
break;
}
}
雑ですがこんな感じの記述になります。
結果はこんな感じに。

SEditableTextBox の各プロパティの機能はこんな感じになります。
・Textエディタブルテキストボックスに最初に表示される文字列です。FText 型で指定します。
・HintTextエディタブルテキストボックスに何も文字列がない時に表示される文字列です。FText 型で指定します。
・Font表示する文字列のフォントです。
FSlateFontInfo 型を使って、フォント名とフォントサイズを指定します。
・Padding文字列を表示するときのマージン(スペース領域)を指定します。
FMargin 型で上下左右を指定します。
・ForegroundColor表示する文字列の色です。
FSlateColor 型で指定します。
・BackgroundColor文字列を表示するための背景の色です。
FSlateColor 型で指定します。
・IsReadOnly読み取り専用にします。
・ReadOnlyForegroundColor読み取り専用の時の文字の色を指定します。
と思ったのですが特に変わらず…。
・IsPassword文字列をそのまま表示せず記号で表示します。
・SelectAllTextWhenFocusedエディタブルテキストボックスにフォーカスが移った時に
文字列を全選択状態にします。
・RevertTextOnEscape編集中にエスケープキーを押した場合に編集前の状態に戻します。
・ClearKeyboardFocusOnCommitデフォルトではエンターを押したときにETextCommit::OnClearedメッセージが投げられるようなのですが
false にすることで ETextCommit::OnCleared は投げられなくなります。
(ETextCommit::OnEnter のみの通知になる)
・IsCaretMovedWhenGainFocus良くわからなかったので公式ドキュメント
・SEditableTextBox::FArguments::IsCaretMovedWhenGainFocus
https://docs.unrealengine.com/latest/INT/API/Runtime/Slate/Widgets/Input/SEditableTextBox/FArguments/IsCaretMovedWhen-/index.htmlこの内容を翻訳したところ
自動補完が終了したときにフォーカスを失うための回避策。
となりました。
デフォルトがtrueなのでそのままの方がよさそうです。
・OnTextCommittedテキストが決定(キャンセル、フォーカス移動を含む)された時に通知される関数を登録します。
・OnTextChangedテキストが変更された時に通知される関数を登録します。
OnTextCommitted と同じ関数を登録することできます。
通知の関数のコミットタイプは
・ETextCommit::Default通常の通知。今回ではテキスト編集中に文字列を変更したタイミングごとに通知される。
・ETextCommit::OnEnterエンターキーで決定したときに通知される。
・ETextCommit::OnUserMovedFocusフォーカスが移動したときに通知される。
・ETextCommit::OnClearedエスケープキーなどでクリアしたときに通知される。
といった感じでしょうか。
思ったより機能が盛りだくさんでしたが、入力系統の一つとして結構使うんじゃないでしょうか。