目录
打开一个界面的时候,可以关闭一些界面
创建自定义Editor Window
Window - SWindow 的关闭
某Develop官方插件的pushWindow 代码c++
最后,不用SWindow->Closed,也可以
参考-扩展阅读:
记录一些c++ 虚幻引擎的代码
、估计没有UE经验的看不明白
但有经验的又不需要看
所以这个分享,有些无谓
如这个链接可以知道:
UE4 自定义DockTab(四) - 知乎 (zhihu.com)
///
/// Step---2、打开DockTab的函数逻辑
///
void FBPEditorMenuModule::OnOpenCustomDockTab()
{
if (ActiveTab.IsValid())
{
if (ActiveTab->CanCloseTab())
{
ActiveTab->RequestCloseTab();
ActiveTab = nullptr;
}
}
if (FBPEditorMenuModule::GatherWBPInfo())
{
FGlobalTabmanager::Get()->InvokeTab(DockTabNameId);
}
}
《不说了,官方文档有》
就是没说如何监听关闭
如何找到下面代码?明显在于查找字串
“window xxx being destroyed"
而这个事件,才是重点
WindowClosedEvent.Broadcast( SharedThis( this ) );
/** Calls OnWindowClosed delegate and WindowClosedEvent when this window is about to be closed */
void SWindow::NotifyWindowBeingDestroyed()
{
OnWindowClosed.ExecuteIfBound( SharedThis( this ) );
WindowClosedEvent.Broadcast( SharedThis( this ) );
#if WITH_EDITOR
if(bIsModalWindow)
{
FCoreDelegates::PostSlateModal.Broadcast();
}
#endif
// Logging to track down window shutdown issues
if (IsRegularWindow())
{
UE_LOG(LogSlate, Log, TEXT("Window '%s' being destroyed"), *GetTitle().ToString());
}
}
void UE::MultiUserServer::FModalWindowManager::PushWindow(const TSharedRef& Window)
{
if (ensureMsgf(bRootWindowIsValid, TEXT("Root window has already been destroyed!")))
{
check(!WindowStack.Contains(Window));
WindowStack.Push(Window);
Window->GetOnWindowClosedEvent().AddLambda([this](const TSharedRef& Window)
{
// Might request window destruction twice
if (WindowStack.Contains(Window))
{
PopWindow();
}
});
}
}
据网上说SWindow,继承自SComponentWidget
Slate 是否又是基类
在如此多搞不清楚,理不顺,我也管不了的情况下,
我找到一个 TabClosed 的方法,能实现所需效果
(c++的面向对象还是很烦的,各种宏更是恶心。。。。。。再次印证了四字成语。。。。。。。。。。。。过犹不及。。。)
TSharedRef FSearchUIWindowModule::OnSpawnPluginTab(const FSpawnTabArgs& SpawnTabArgs)
{
/*FText WidgetText = FText::Format(
LOCTEXT("WindowWidgetText", "Add code to {0} in {1} to override this window's contents"),
FText::FromString(TEXT("FSearchUIWindowModule::OnSpawnPluginTab")),
FText::FromString(TEXT("SearchUIWindow.cpp"))
);*/
return SNew(SDockTab)
.TabRole(ETabRole::NomadTab)
[
// Put your tab content here!
/* SNew(SBox)
.HAlign(HAlign_Center)
.VAlign(VAlign_Center)
[
SNew(STextBlock)
.Text(WidgetText)
]*/
SNew(SSQuickStartWindowMenu)
]
.OnTabClosed(SDockTab::FOnTabClosedCallback::CreateLambda([this](TSharedRef Self) {
//this->OnWindowClose(Self);
UE_LOG(LogTemp, Error, TEXT("11-OnWindowClose"));
}));
}
UE4/UE5 Windows窗口变化监听随笔_ue4 ugameviewportclient_WhiteTian的博客-CSDN博客
UE4 Slate的语法初步分析_追风ぁPanda的博客-CSDN博客
(从这些链接的作者再次印证了之前说过的:还在研究c++的都是10+年以上码龄的老油条)