2016-11-07 152 views
0

我newbee在C++中的一員,並試圖從Unity3D遷移到虛幻引擎4,現在,我試着寫我的第一個插件(UI插件和工具是我工作中非常重要的部分),並堅持將OnClicked事件添加到SButton 我從創建獨立窗口插件開始並添加一個按鈕。虛幻引擎4 CPP:「AsShared」:是不是「MyModule的」

TSharedRef<SDockTab> FAssistLibModule::OnSpawnPluginTab(const FSpawnTabArgs& SpawnTabArgs) { 
FText WidgetText = FText::Format(
    LOCTEXT("WindowWidgetText", "Add code 111 222 to {0} in {1} to override this window's contents"), 
    FText::FromString(TEXT("FAssistLibModule::OnSpawnPluginTab")), 
    FText::FromString(TEXT("AssistLib.cpp")) 
    ); 

FText ButtonLabel = FText::FromString("Button?"); 

return SNew(SDockTab) 
    .TabRole(ETabRole::NomadTab) 
    [ 
     // Put your tab content here! 
     SNew(SVerticalBox) 
     +SVerticalBox::Slot().VAlign(VAlign_Top) 
     [ 
      SNew(STextBlock) 
      .Text(WidgetText) 
     ] 
     +SVerticalBox::Slot().VAlign(VAlign_Top) 
     [ 
      SNew(SButton) 
      .Text(ButtonLabel) 
      .OnClicked(this, &FAssistLibModule::CollectBlueprintsButtonClicked) 
     ] 

    ];} 

和編譯後UE給我這個錯誤

Info Compiling game modules for hot reload 
Info Performing 2 actions (4 in parallel) 
Info Module.MyModule.cpp 
Info c:\program files (x86)\epic games\4.13\engine\source\runtime\core\public\delegates\DelegateSignatureImpl.inl(181): error C2039: 'AsShared': is not a member of 'FMyModuleModule' 
Error D:\dev\repos\assist-lib-ue4\Plugins\MyModule\Source\MyModule\Public\MyModule.h(10) : note: see declaration of 'FMyModuleModule' 
Info C:\Program Files (x86)\Epic Games\4.13\Engine\Source\Runtime\Slate\Public\Widgets\Input\SButton.h(54): note: see reference to function template instantiation 'TBaseDelegate<FReply> TBaseDelegate<FReply>::CreateSP<UserClass,>(UserClass *,FReply (__cdecl FMyModuleModule::*)(void))' being compiled 
Info   with 
Info   [ 
Info    UserClass=FMyModuleModule 
Info   ] 
Info C:\Program Files (x86)\Epic Games\4.13\Engine\Source\Runtime\Slate\Public\Widgets\Input\SButton.h(54): note: see reference to function template instantiation 'TBaseDelegate<FReply> TBaseDelegate<FReply>::CreateSP<UserClass,>(UserClass *,FReply (__cdecl FMyModuleModule::*)(void))' being compiled 
Info   with 
Info   [ 
Info    UserClass=FMyModuleModule 
Info   ] 
Error D:\dev\repos\assist-lib-ue4\Plugins\MyModule\Source\MyModule\Private\MyModule.cpp(89) : note: see reference to function template instantiation 'SButton::FArguments::WidgetArgsType &SButton::FArguments::OnClicked<FMyModuleModule>(UserClass *,FReply (__cdecl FMyModuleModule::*)(void))' being compiled 
Info   with 
Info   [ 
Info    UserClass=FMyModuleModule 
Info   ] 
Info c:\program files (x86)\epic games\4.13\engine\source\runtime\core\public\delegates\DelegateSignatureImpl.inl(181): error C2672: 'StaticCastSharedRef': no matching overloaded function found 
Info c:\program files (x86)\epic games\4.13\engine\source\runtime\core\public\delegates\DelegateSignatureImpl.inl(181): error C2672: 'TBaseDelegate<FReply>::CreateSP': no matching overloaded function found 
Info ERROR: UBT ERROR: Failed to produce item: D:\dev\repos\assist-lib-ue4\Plugins\MyModule\Binaries\Win64\UE4Editor-MyModule-6676.dll 
Info Total build time: 46.77 seconds 

請幫幫忙,我不understant怎麼回事,感謝您的任何建議!

回答

2

FAssistLibModule看起來像從IModuleInterface派生而不是共享指針,所以你必須指定方法來綁定OnClicked

我認爲這是正確的,以取代

OnClicked(this, &FAssistLibModule::CollectBlueprintsButtonClicked)

OnClicked(FOnClicked::CreateRaw(this, &FAssistLibModule::CollectBlueprintsButtonClicked))

OnClicked_Raw(this, &FAssistLibModule::CollectBlueprintsButtonClicked)

檢查這個線程,我認爲這是有用的:https://forums.unrealengine.com/showthread.php?78289-Slate-button-causes-the-editor-to-hang-when-instantiated&p=343287&viewfull=1#post343287

+0

謝謝!它的幫助! –