|
先说明一下,这个是因为写插件的时候需要用到的,项目中如果有需要的话,也可以参考!
前提
在Module要使用Style之前,我们就已经需要对style进行注册!
void FMyEditorModule::StartupModule()
{
// 创建style
FMyEditorStyle::Initialize();
...
}
还有在Module销毁的时候记得清理一下
void FMyEditorModule::ShutdownModule()
{
FMyEditorStyle::Shutdown();
}
注册style
为了防止多次生成一些对象,我这里使用了静态
TSharedPtr< FSlateStyleSet > FMyEditorStyle::StyleInstance = nullptr;
void FMyEditorStyle::Initialize()
{
if (!StyleInstance.IsValid())
{
StyleInstance = Create();
FSlateStyleRegistry::RegisterSlateStyle(*StyleInstance);
}
}
FSlateStyleRegistry::RegisterSlateStyle可以将已经处理好的style添加到全局的slatestyle中,以方便我们在代码中使用;
TSharedRef< FSlateStyleSet > FMyEditorStyle::Create()
{
// &#34;MyEditor&#34;是这个style的名称,如果要使用的时候需要记住这个名称,可以提取成成员方法,我偷懒,就不说了
TSharedRef< FSlateStyleSet > style = MakeShareable(new FSlateStyleSet(&#34;MyEditor&#34;));
style->SetContentRoot(IPluginManager::Get().FindPlugin(TEXT(&#34;MyEditor&#34;))->GetBaseDir() / TEXT(&#34;Resources&#34;));
style->Set(&#34;MyEditor.MenuIcon&#34;, new FSlateImageBrush(style->RootToContentDir(&#34;Button_Icon40&#34;, TEXT(&#34;.png&#34;)), FVector2D(128,128)));
return style;
}
IPluginManager的使用需要在Build.cs中添加DependencyModuleNames.Add Projects;
style->SetContentRoot是设置相对目录的!
style->Set是可以绑定相关的样式的
demo代码中,我使用的是图片
FSlateImageBrush
中设置的大小可以和资源的真实大小无关,但是该大小会同步影响了菜单的大小,文章头的诡异就是因为我设置成了 了,最好的大小是 ;
简单使用
ToolBarBuilder.AddComboButton(
FUIAction(),
FOnGetContent::CreateRaw(this, &FMyEditorModule::AddToolsSubMenu),
LOCTEXT(&#34;MyTools&#34;, &#34;My Tools&#34;),
LOCTEXT(&#34;MyToolsTips&#34;, &#34;My Tools Tips&#34;),
FSlateIcon(TEXT(&#34;MyEditor&#34;), TEXT(&#34;MyEditor.MenuIcon&#34;))
);
只需要简单在FSlateIcon中传入style的名称和对应的key就可以了!
销毁
清理引用就行了!
void FMyEditorStyle::Shutdown()
{
FSlateStyleRegistry::UnRegisterSlateStyle(*StyleInstance);
ensure(StyleInstance.IsUnique());
StyleInstance.Reset();
} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|