I’m trying to replicate the Slate structure of the StrategyGame example project.
This line is throwing things off ( MainMenuWidget.cpp )
menuStyle = &FManipulatorsStyle::Get().GetWidgetStyle<FMainMenuStyle>("DefaultMainMenuStyle");
OUTPUT
1>MainMenuWidget.cpp.obj : error
LNK2019: unresolved external symbol
“public: static struct FMainMenuStyle
const & __cdecl
FMainMenuStyle::GetDefault(void)”
(?GetDefault@FMainMenuStyle@@SAAEBU1@XZ)
referenced in function "public: struct
FMainMenuStyle const & __cdecl
ISlateStyle::GetWidgetStyle FMainMenuStyle>(class FName,char const
*)const " (??$GetWidgetStyle@UFMainMenuStyle@@@ISlateStyle@@QEBAAEBUFMainMenuStyle@@VFName@@PEBD@Z)
ManipulatorsStyle.h
class FManipulatorsStyle
{
public:
static void Initialize();
static void Shutdown();
static void ReloadTextures();
static const ISlateStyle& Get();
static FName GetStyleSetName();
private:
static TSharedRef <class FSlateStyleSet> Create();
static TSharedPtr <class FSlateStyleSet> ManipulatorsStyleInstance;
};
ManipulatorsStyle.cpp
TSharedRef <FSlateStyleSet> FManipulatorsStyle::Create()
{
TSharedRef <FSlateStyleSet> styleRef = FSlateGameResources::New(FManipulatorsStyle::GetStyleSetName(), "/Game/UI/Styles", "Game/UI/Styles");
FSlateStyleSet& style = styleRef.Get();
style.Set("Manipulators.MenuTitleFont", FSlateFontInfo(FPaths::GameContentDir() / "Fonts/Montserrat-Hairline.ttf", 60));
style.Set("Manipulators.MenuSubTitleFont", FSlateFontInfo(FPaths::GameContentDir() / "Fonts/Montserrat-Hairline.ttf", 42));
style.Set("Manipulators.MenuExitFont", FSlateFontInfo(FPaths::GameContentDir() / "Fonts/Montserrat-Hairline.ttf", 35));
return styleRef;
}
void FManipulatorsStyle::ReloadTextures()
{
FSlateApplication::Get().GetRenderer()->ReloadTextureResources();
}
const ISlateStyle& FManipulatorsStyle::Get()
{
return *ManipulatorsStyleInstance;
}
MainMenuWidget.h
USTRUCT()
struct FMainMenuStyle : public FSlateWidgetStyle
{
GENERATED_USTRUCT_BODY()
FMainMenuStyle();
virtual ~FMainMenuStyle();
virtual void GetResources(TArray <const FSlateBrush*> &outBrushes) const override;
virtual const FName GetTypeName() const override { return TypeName; };
static const FMainMenuStyle& GetDefault();
static const FName TypeName;
UPROPERTY(EditAnywhere, Category = Appearance)
FSlateBrush backgroundBrush;
FMainMenuStyle& SetBackgroundBrush(const FSlateBrush& inBackgroundbrush);
};
UCLASS(hidecategories=Object, MinimalAPI)
class UMainMenuWidgetStyle : public USlateWidgetStyleContainerBase
{
GENERATED_UCLASS_BODY()
public:
UPROPERTY(Category = Appearance, EditAnywhere, meta = (ShowOnlyInnerProperties))
FMainMenuStyle menuStyle;
virtual const struct FSlateWidgetStyle* const GetStyle() const override
{
return static_cast <const struct FSlateWidgetStyle*> ( &menuStyle);
}
};