はじめに
こんばんは、プログラマーの笹目です!
UE4のエディタ拡張に関して少しずつ掲載しています。
今回はボタン編です。
前回はウィジェットの属性を変更する方法を見てみました。
今回はウィジェットにイベントを登録する方法を見てみます。
※使用したバージョンはUE4.13.2になります。
※言語環境は英語になります。
ボタンを追加
前回、ラベルを設定していた箇所を修正してボタンを追加してみます。
// ウィンドウに表示するコンテンツ
return SNew( SDockTab )
.TabRole( ETabRole::NomadTab )
[
SNew( SBox )
.HAlign( HAlign_Center )
.VAlign( VAlign_Center )
[
// ボタン追加(STextBoxをSButtonに変更)
SNew( SButton )
.Text( LOCTEXT( "ButtonText", "押して" ) )
]
];
実行した結果、下図のようにボタンが追加されました。
ただ、このままではボタンを押しても何も起きません。
このボタンに押したときの処理を登録する必要があります。
イベント登録
ボタンを押したときの処理を登録していきます。
まずは、FTestWindowModuleクラスにボタンが押されたときに呼び出す関数を追加します。
ひとまずOutputLogパネルにログを出力する処理を書きます(戻り値に関しては後述)。
/**
* ボタンが押されたときの処理
*/
FReply FTestWindowModule::OnClickedButton()
{
UE_LOG( LogTemp, Log, TEXT( "押されたよ!" ) )
return FReply::Handled();
}
上記の関数をウィジェット側に設定します。
Buttonウィジェットの場合は、OnClickedイベントに関数を登録することによって、
ボタンが押されたときに関数が呼び出されるようになります。
SNew( SButton )
.Text( LOCTEXT( "ButtonText", "押して" ) )
.OnClicked_Raw( this, &FTestWindowModule::OnClickedButton )
実行してボタンを押してみると、OutputLogパネルにログが出力されていることが確認できます。
イベントについて
前回の記事で、属性の調べ方としてSLATE_ATTRIBUTEマクロを紹介しました。
実はイベントに関しても同様にマクロによって定義されています。
イベントの定義ではSLATE_EVENT( デリゲート名, イベント名 ) という形で定義されています。
イベント名は先程使用した「OnClicked」などです。
デリゲート名はそのイベントを登録するデリゲート型の名前です。
OnClickedイベントは以下のように定義されています。
/** Called when the button is clicked */
SLATE_EVENT( FOnClicked, OnClicked )
ではFOnClickedとはどのようなデリゲートなのでしょうか。
FOnClickedは以下のように定義されています。
/**
* A delegate that is invoked when widgets want to notify a user that they have been clicked.
* Intended for use by buttons and other button-like widgets.
*/
DECLARE_DELEGATE_RetVal( FReply, FOnClicked )
各デリゲートはマクロにより以下のように定義されています。
以下はデリゲート登録マクロの一部ですが、他のデリゲート登録マクロについても調べたい方は、
DelegateCombinations.hをご覧ください(公式ドキュメントはこちら)。
DECLARE_DELEGATE_RetVal( 返り値型, デリゲート名 )
DECLARE_DELEGATE_RetVal_TwoParams( 返り値型, デリゲート名, 第1引数, 第2引数 )
DECLARE_DELEGATE_OneParam( デリゲート名, 第1引数 )
DECLARE_DELEGATE_TwoParams( デリゲート名, 第1引数, 第2引数 )
FOnClickedデリゲートはDECLARE_DELEGATE_RetValマクロで定義されています。
したがって、OnClickedイベントでは
戻り値型:FReply
引数:なし
の関数を登録することができるということになります。
ウィジェット追加時の調べ方
ウィジェットを追加した際には、そのウィジェットクラスのヘッダーファイルを見て、
前回紹介した、SLATE_ATTRIBUTEマクロ
今回紹介した、SLATE_EVENTマクロ
で定義を確認しみてると、
そのウィジェットで何ができるのか、どう設定するのかを確認できるかと思います。
是非参考にしてみてください!
【免責事項】
本サイトでの情報を利用することによる損害等に対し、株式会社ロジカルビートは一切の責任を負いません。