UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DeclarativeSyntaxSupport.h File Reference

Go to the source code of this file.

Classes

struct  TAlwaysValidWidget
 
struct  NamedSlotProperty< DeclarationType >
 
struct  FSlateBaseNamedArgs
 
struct  TSlateBaseNamedArgs< InWidgetType >
 
struct  RequiredArgs::T0RequiredArgs
 
struct  RequiredArgs::T1RequiredArgs< Arg0Type >
 
struct  RequiredArgs::T2RequiredArgs< Arg0Type, Arg1Type >
 
struct  RequiredArgs::T3RequiredArgs< Arg0Type, Arg1Type, Arg2Type >
 
struct  RequiredArgs::T4RequiredArgs< Arg0Type, Arg1Type, Arg2Type, Arg3Type >
 
struct  RequiredArgs::T5RequiredArgs< Arg0Type, Arg1Type, Arg2Type, Arg3Type, Arg4Type >
 
struct  TSlateDecl< WidgetType, RequiredArgsPayloadType >
 

Namespaces

namespace  RequiredArgs
 

Macros

#define SNew(WidgetType, ...)    MakeTDecl<WidgetType>( #WidgetType, __FILE__, __LINE__, RequiredArgs::MakeRequiredArgs(__VA_ARGS__) ) <<= TYPENAME_OUTSIDE_TEMPLATE WidgetType::FArguments()
 
#define SAssignNew(ExposeAs, WidgetType, ...)    MakeTDecl<WidgetType>( #WidgetType, __FILE__, __LINE__, RequiredArgs::MakeRequiredArgs(__VA_ARGS__) ) . Expose( ExposeAs ) <<= TYPENAME_OUTSIDE_TEMPLATE WidgetType::FArguments()
 
#define SArgumentNew(InArgs, WidgetType, ...)    MakeTDecl<WidgetType>( #WidgetType, __FILE__, __LINE__, RequiredArgs::MakeRequiredArgs(__VA_ARGS__) ) <<= InArgs
 
#define SLATE_BEGIN_ARGS(InWidgetType)
 
#define SLATE_USER_ARGS(WidgetType)
 
#define SLATE_END_ARGS()    };
 
#define SLATE_PRIVATE_ATTRIBUTE_VARIABLE(AttrType, AttrName)    TAttribute< AttrType > _##AttrName
 
#define SLATE_PRIVATE_ATTRIBUTE_FUNCTION(AttrType, AttrName)
 
#define SLATE_PRIVATE_ARGUMENT_VARIABLE(ArgType, ArgName)    ArgType _##ArgName
 
#define SLATE_PRIVATE_ARGUMENT_FUNCTION(ArgType, ArgName)
 
#define SLATE_ATTRIBUTE(AttrType, AttrName)
 
#define SLATE_ATTRIBUTE_DEPRECATED(AttrType, AttrName, DeprecationVersion, DeprecationMessage)
 
#define SLATE_ARGUMENT(ArgType, ArgName)
 
#define SLATE_ARGUMENT_DEPRECATED(ArgType, ArgName, DeprecationVersion, DeprecationMessage)
 
#define SLATE_ARGUMENT_DEFAULT(ArgType, ArgName)
 
#define SLATE_PRIVATE_STYLE_ARGUMENT_VARIABLE(ArgType, ArgName)    const ArgType* _##ArgName; \
 
#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_ARGTYPE_PTR(ArgType, ArgName)
 
#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_WIDGETSTYLE_PTR(ArgType, ArgName)
 
#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_WIDGETSTYLE_WEAKPTR(ArgType, ArgName)
 
#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_PTR(ArgType, ArgName)
 
#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_REF(ArgType, ArgName)
 
#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_WEAKPTR(ArgType, ArgName)
 
#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_SHAREDPTR(ArgType, ArgName)
 
#define SLATE_STYLE_ARGUMENT(ArgType, ArgName)
 
#define SLATE_STYLE_ARGUMENT_DEPRECATED(ArgType, ArgName, DeprecationVersion, DeprecationMessage)
 
#define SLATE_SUPPORTS_SLOT(SlotType)
 
#define SLATE_SUPPORTS_SLOT_WITH_ARGS(SlotType)
 
#define SLATE_PRIVATE_SLOT_BEGIN_ARGS(SlotType, SlotParentType)
 
#define SLATE_SLOT_ARGUMENT(SlotType, SlotName)
 
#define SLATE_SLOT_BEGIN_ARGS(SlotType, SlotParentType)
 
#define SLATE_SLOT_BEGIN_ARGS_OneMixin(SlotType, SlotParentType, Mixin1)
 
#define SLATE_SLOT_BEGIN_ARGS_TwoMixins(SlotType, SlotParentType, Mixin1, Mixin2)
 
#define SLATE_SLOT_BEGIN_ARGS_ThreeMixins(SlotType, SlotParentType, Mixin1, Mixin2, Mixin3)
 
#define SLATE_SLOT_BEGIN_ARGS_FourMixins(SlotType, SlotParentType, Mixin1, Mixin2, Mixin3, Mixin4)
 
#define SLATE_SLOT_END_ARGS()    };
 
#define SLATE_NAMED_SLOT(DeclarationType, SlotName)
 
#define SLATE_DEFAULT_SLOT(DeclarationType, SlotName)
 
#define SLATE_EVENT(DelegateName, EventName)
 
#define SLATE_EVENT_DEPRECATED(DeprecationVersion, DeprecationMessage, DelegateName, EventName, UpgradedEventName, UpgradeFuncName)
 

Functions

FORCEINLINE T0RequiredArgs RequiredArgs::MakeRequiredArgs ()
 
template<typename Arg0Type >
T1RequiredArgs< Arg0Type && > RequiredArgs::MakeRequiredArgs (Arg0Type &&InArg0)
 
template<typename Arg0Type , typename Arg1Type >
T2RequiredArgs< Arg0Type &&, Arg1Type && > RequiredArgs::MakeRequiredArgs (Arg0Type &&InArg0, Arg1Type &&InArg1)
 
template<typename Arg0Type , typename Arg1Type , typename Arg2Type >
T3RequiredArgs< Arg0Type &&, Arg1Type &&, Arg2Type && > RequiredArgs::MakeRequiredArgs (Arg0Type &&InArg0, Arg1Type &&InArg1, Arg2Type &&InArg2)
 
template<typename Arg0Type , typename Arg1Type , typename Arg2Type , typename Arg3Type >
T4RequiredArgs< Arg0Type &&, Arg1Type &&, Arg2Type &&, Arg3Type && > RequiredArgs::MakeRequiredArgs (Arg0Type &&InArg0, Arg1Type &&InArg1, Arg2Type &&InArg2, Arg3Type &&InArg3)
 
template<typename Arg0Type , typename Arg1Type , typename Arg2Type , typename Arg3Type , typename Arg4Type >
T5RequiredArgs< Arg0Type &&, Arg1Type &&, Arg2Type &&, Arg3Type &&, Arg4Type && > RequiredArgs::MakeRequiredArgs (Arg0Type &&InArg0, Arg1Type &&InArg1, Arg2Type &&InArg2, Arg3Type &&InArg3, Arg4Type &&InArg4)
 
template<typename WidgetType , typename RequiredArgsPayloadType >
TSlateDecl< WidgetType, RequiredArgsPayloadTypeMakeTDecl (const ANSICHAR *InType, const ANSICHAR *InFile, int32 OnLine, RequiredArgsPayloadType &&InRequiredArgs)
 

Macro Definition Documentation

◆ SArgumentNew

#define SArgumentNew (   InArgs,
  WidgetType,
  ... 
)     MakeTDecl<WidgetType>( #WidgetType, __FILE__, __LINE__, RequiredArgs::MakeRequiredArgs(__VA_ARGS__) ) <<= InArgs

◆ SAssignNew

#define SAssignNew (   ExposeAs,
  WidgetType,
  ... 
)     MakeTDecl<WidgetType>( #WidgetType, __FILE__, __LINE__, RequiredArgs::MakeRequiredArgs(__VA_ARGS__) ) . Expose( ExposeAs ) <<= TYPENAME_OUTSIDE_TEMPLATE WidgetType::FArguments()

◆ SLATE_ARGUMENT

#define SLATE_ARGUMENT (   ArgType,
  ArgName 
)
Value:
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define SLATE_PRIVATE_ARGUMENT_VARIABLE(ArgType, ArgName)
Definition DeclarativeSyntaxSupport.h:177
#define ArgName(Type, Name)
Definition TypedElementQueryCapabilityForwarder.h:45

Use this macro to declare a slate argument. Arguments differ from attributes in that they can only be values

◆ SLATE_ARGUMENT_DEFAULT

#define SLATE_ARGUMENT_DEFAULT (   ArgType,
  ArgName 
)
Value:
#define SLATE_PRIVATE_ARGUMENT_FUNCTION(ArgType, ArgName)
Definition DeclarativeSyntaxSupport.h:181

Like SLATE_ARGUMENT, but support a default value. e.g.

SLATE_ARGUMENT_DEFAULT(float, WheelScrollMultiplier) { 1.0f };

◆ SLATE_ARGUMENT_DEPRECATED

#define SLATE_ARGUMENT_DEPRECATED (   ArgType,
  ArgName,
  DeprecationVersion,
  DeprecationMessage 
)
Value:

Use when an argument used to be declared SLATE_ARGUMENT and it should no longer be used

◆ SLATE_ATTRIBUTE

#define SLATE_ATTRIBUTE (   AttrType,
  AttrName 
)
Value:
SLATE_PRIVATE_ATTRIBUTE_VARIABLE( AttrType, AttrName ); \
SLATE_PRIVATE_ATTRIBUTE_FUNCTION( AttrType, AttrName )
#define SLATE_PRIVATE_ATTRIBUTE_VARIABLE(AttrType, AttrName)
Definition DeclarativeSyntaxSupport.h:120

Use this macro to add a attribute to the declaration of your widget. An attribute can be a value or a function.

◆ SLATE_ATTRIBUTE_DEPRECATED

#define SLATE_ATTRIBUTE_DEPRECATED (   AttrType,
  AttrName,
  DeprecationVersion,
  DeprecationMessage 
)
Value:
SLATE_PRIVATE_ATTRIBUTE_VARIABLE( AttrType, AttrName ); \
UE_DEPRECATED(DeprecationVersion, DeprecationMessage) \
SLATE_PRIVATE_ATTRIBUTE_FUNCTION( AttrType, AttrName )

Use when an argument used to be declared SLATE_ATTRIBUTE and it should no longer be used

◆ SLATE_BEGIN_ARGS

#define SLATE_BEGIN_ARGS (   InWidgetType)
Value:
public: \
struct FArguments : public TSlateBaseNamedArgs<InWidgetType> \
{ \
typedef FArguments WidgetArgsType; \
FORCENOINLINE FArguments()
#define FORCENOINLINE
Definition AndroidPlatform.h:142
Definition DeclarativeSyntaxSupport.h:681
InWidgetType WidgetType
Definition DeclarativeSyntaxSupport.h:682
WidgetType::FArguments WidgetArgsType
Definition DeclarativeSyntaxSupport.h:683

Widget authors can use SLATE_BEGIN_ARGS and SLATE_END_ARS to add support for widget construction via SNew and SAssignNew. e.g.

SLATE_BEGIN_ARGS( SMyWidget ) , _PreferredWidth( 150.0f ) , _ForegroundColor( FLinearColor::White ) {}

SLATE_ATTRIBUTE(float, PreferredWidth) SLATE_ATTRIBUTE(FSlateColor, ForegroundColor) SLATE_END_ARGS()

◆ SLATE_DEFAULT_SLOT

#define SLATE_DEFAULT_SLOT (   DeclarationType,
  SlotName 
)
Value:
DeclarationType & operator[]( const TSharedRef<SWidget>& InChild ) \
{ \
_##SlotName.Widget = InChild; \
return static_cast<WidgetArgsType*>(this)->Me(); \
}
#define SLATE_NAMED_SLOT(DeclarationType, SlotName)
Definition DeclarativeSyntaxSupport.h:437
Definition SharedPointer.h:153

◆ SLATE_END_ARGS

#define SLATE_END_ARGS ( )     };

◆ SLATE_EVENT

#define SLATE_EVENT (   DelegateName,
  EventName 
)

Use this macro to add event handler support to the declarative syntax of your widget. It is expected that the widget has a delegate called of type 'EventDelegateType' that is named 'EventName'.

◆ SLATE_EVENT_DEPRECATED

#define SLATE_EVENT_DEPRECATED (   DeprecationVersion,
  DeprecationMessage,
  DelegateName,
  EventName,
  UpgradedEventName,
  UpgradeFuncName 
)

◆ SLATE_NAMED_SLOT

#define SLATE_NAMED_SLOT (   DeclarationType,
  SlotName 
)
Value:
{ \
return NamedSlotProperty< DeclarationType >( *this, _##SlotName ); \
} \
TAlwaysValidWidget _##SlotName; \
Definition DeclarativeSyntaxSupport.h:414
Definition DeclarativeSyntaxSupport.h:392

Use this macro to add support for named slot properties such as Content and Header. See NamedSlotProperty for more details.

NOTE: If you're using this within a widget class that is templated, then you might have to specify a full name for the declaration. For example: SLATE_NAMED_SLOT( typename SSuperWidget<T>::Declaration, Content )

◆ SLATE_PRIVATE_ARGUMENT_FUNCTION

#define SLATE_PRIVATE_ARGUMENT_FUNCTION (   ArgType,
  ArgName 
)
Value:
WidgetArgsType& ArgName( ArgType InArg ) \
{ \
_##ArgName = InArg; \
return static_cast<WidgetArgsType*>(this)->Me(); \
}

◆ SLATE_PRIVATE_ARGUMENT_VARIABLE

#define SLATE_PRIVATE_ARGUMENT_VARIABLE (   ArgType,
  ArgName 
)     ArgType _##ArgName

◆ SLATE_PRIVATE_ATTRIBUTE_FUNCTION

#define SLATE_PRIVATE_ATTRIBUTE_FUNCTION (   AttrType,
  AttrName 
)

◆ SLATE_PRIVATE_ATTRIBUTE_VARIABLE

#define SLATE_PRIVATE_ATTRIBUTE_VARIABLE (   AttrType,
  AttrName 
)     TAttribute< AttrType > _##AttrName

◆ SLATE_PRIVATE_SLOT_BEGIN_ARGS

#define SLATE_PRIVATE_SLOT_BEGIN_ARGS (   SlotType,
  SlotParentType 
)
Value:
{ \
using WidgetArgsType = SlotType::FSlotArguments; \
using SlotParentType::FSlotArguments::FSlotArguments;

◆ SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_ARGTYPE_PTR

#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_ARGTYPE_PTR (   ArgType,
  ArgName 
)
Value:
WidgetArgsType& ArgName( const ArgType* InArg ) \
{ \
_##ArgName = InArg; \
return static_cast<WidgetArgsType*>(this)->Me(); \
}

◆ SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_PTR

#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_PTR (   ArgType,
  ArgName 
)
Value:
WidgetArgsType& ArgName( const class ISlateStyle* InSlateStyle, const FName& StyleName, const ANSICHAR* Specifier = nullptr ) \
{ \
check( InSlateStyle != nullptr ); \
_##ArgName = &InSlateStyle->GetWidgetStyle< ArgType >( StyleName, Specifier ); \
return static_cast<WidgetArgsType*>(this)->Me(); \
}
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
Definition NameTypes.h:617
Definition ISlateStyle.h:18

◆ SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_REF

#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_REF (   ArgType,
  ArgName 
)
Value:
WidgetArgsType& ArgName( const class ISlateStyle& InSlateStyle, const FName& StyleName, const ANSICHAR* Specifier = nullptr ) \
{ \
_##ArgName = &InSlateStyle.GetWidgetStyle< ArgType >( StyleName, Specifier ); \
return static_cast<WidgetArgsType*>(this)->Me(); \
}

◆ SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_SHAREDPTR

#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_SHAREDPTR (   ArgType,
  ArgName 
)
Value:
WidgetArgsType& ArgName( const TSharedPtr< const class ISlateStyle >& InSlateStyle, const FName& StyleName, const ANSICHAR* Specifier = nullptr ) \
{ \
_##ArgName = &InSlateStyle->GetWidgetStyle< ArgType >( StyleName, Specifier ); \
return static_cast<WidgetArgsType*>(this)->Me(); \
}
Definition SharedPointer.h:692

◆ SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_WEAKPTR

#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_SLATESTYLE_WEAKPTR (   ArgType,
  ArgName 
)
Value:
WidgetArgsType& ArgName( const TWeakObjectPtr< const class ISlateStyle >& InSlateStyle, const FName& StyleName, const ANSICHAR* Specifier = nullptr ) \
{ \
_##ArgName = &InSlateStyle.Get()->GetWidgetStyle< ArgType >( StyleName, Specifier ); \
return static_cast<WidgetArgsType*>(this)->Me(); \
}
Definition WeakObjectPtrTemplates.h:25

◆ SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_WIDGETSTYLE_PTR

#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_WIDGETSTYLE_PTR (   ArgType,
  ArgName 
)
Value:
WidgetArgsType& ArgName( const class USlateWidgetStyleAsset* const InSlateStyleAsset ) \
{ \
_##ArgName = InSlateStyleAsset->GetStyleChecked< ArgType >(); \
return static_cast<WidgetArgsType*>(this)->Me(); \
}
Definition SlateWidgetStyleAsset.h:18

◆ SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_WIDGETSTYLE_WEAKPTR

#define SLATE_PRIVATE_STYLE_ARGUMENT_FUNCTION_WIDGETSTYLE_WEAKPTR (   ArgType,
  ArgName 
)
Value:
{ \
_##ArgName = InSlateStyleAsset.Get()->GetStyleChecked< ArgType >(); \
return static_cast<WidgetArgsType*>(this)->Me(); \
}

◆ SLATE_PRIVATE_STYLE_ARGUMENT_VARIABLE

#define SLATE_PRIVATE_STYLE_ARGUMENT_VARIABLE (   ArgType,
  ArgName 
)     const ArgType* _##ArgName; \

◆ SLATE_SLOT_ARGUMENT

#define SLATE_SLOT_ARGUMENT (   SlotType,
  SlotName 
)
Value:
WidgetArgsType& operator + (typename SlotType::FSlotArguments& SlotToAdd) \
{ \
_##SlotName.Add( MoveTemp(SlotToAdd) ); \
return static_cast<WidgetArgsType*>(this)->Me(); \
} \
WidgetArgsType& operator + (typename SlotType::FSlotArguments&& SlotToAdd) \
{ \
_##SlotName.Add( MoveTemp(SlotToAdd) ); \
return static_cast<WidgetArgsType*>(this)->Me(); \
}
constexpr EIOSEventType operator+(EIOSEventType type, int Index)
Definition IOSInputInterface.cpp:138
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696

Use this macro between SLATE_BEGIN_ARGS and SLATE_END_ARGS in order to add support for slots with the construct pattern.

◆ SLATE_SLOT_BEGIN_ARGS

#define SLATE_SLOT_BEGIN_ARGS (   SlotType,
  SlotParentType 
)
Value:
public: \
struct FSlotArguments : public SlotParentType::FSlotArguments \
SLATE_PRIVATE_SLOT_BEGIN_ARGS( SlotType, SlotParentType )
#define SLATE_PRIVATE_SLOT_BEGIN_ARGS(SlotType, SlotParentType)
Definition DeclarativeSyntaxSupport.h:339

◆ SLATE_SLOT_BEGIN_ARGS_FourMixins

#define SLATE_SLOT_BEGIN_ARGS_FourMixins (   SlotType,
  SlotParentType,
  Mixin1,
  Mixin2,
  Mixin3,
  Mixin4 
)
Value:
public: \
struct FSlotArguments : public SlotParentType::FSlotArguments, public Mixin1::FSlotArgumentsMixin, public Mixin2::FSlotArgumentsMixin, public Mixin3::FSlotArgumentsMixin, public Mixin4::FSlotArgumentsMixin \
SLATE_PRIVATE_SLOT_BEGIN_ARGS( SlotType, SlotParentType )

◆ SLATE_SLOT_BEGIN_ARGS_OneMixin

#define SLATE_SLOT_BEGIN_ARGS_OneMixin (   SlotType,
  SlotParentType,
  Mixin1 
)
Value:
public: \
struct FSlotArguments : public SlotParentType::FSlotArguments, public Mixin1::FSlotArgumentsMixin \
SLATE_PRIVATE_SLOT_BEGIN_ARGS( SlotType, SlotParentType )

◆ SLATE_SLOT_BEGIN_ARGS_ThreeMixins

#define SLATE_SLOT_BEGIN_ARGS_ThreeMixins (   SlotType,
  SlotParentType,
  Mixin1,
  Mixin2,
  Mixin3 
)
Value:
public: \
struct FSlotArguments : public SlotParentType::FSlotArguments, public Mixin1::FSlotArgumentsMixin, public Mixin2::FSlotArgumentsMixin, public Mixin3::FSlotArgumentsMixin \
SLATE_PRIVATE_SLOT_BEGIN_ARGS( SlotType, SlotParentType )

◆ SLATE_SLOT_BEGIN_ARGS_TwoMixins

#define SLATE_SLOT_BEGIN_ARGS_TwoMixins (   SlotType,
  SlotParentType,
  Mixin1,
  Mixin2 
)
Value:
public: \
struct FSlotArguments : public SlotParentType::FSlotArguments, public Mixin1::FSlotArgumentsMixin, public Mixin2::FSlotArgumentsMixin \
SLATE_PRIVATE_SLOT_BEGIN_ARGS( SlotType, SlotParentType )

◆ SLATE_SLOT_END_ARGS

#define SLATE_SLOT_END_ARGS ( )     };

◆ SLATE_STYLE_ARGUMENT

◆ SLATE_STYLE_ARGUMENT_DEPRECATED

◆ SLATE_SUPPORTS_SLOT

#define SLATE_SUPPORTS_SLOT (   SlotType)
Value:
UE_DEPRECATED(5.0, "SLATE_SUPPORTS_SLOT is deprecated. Use SLATE_SLOT_ARGUMENT") \
WidgetArgsType& operator + (SlotType& SlotToAdd) \
{ \
Slots.Add( &SlotToAdd ); \
return static_cast<WidgetArgsType*>(this)->Me(); \
}
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302

Use this macro between SLATE_BEGIN_ARGS and SLATE_END_ARGS in order to add support for slots.

◆ SLATE_SUPPORTS_SLOT_WITH_ARGS

#define SLATE_SUPPORTS_SLOT_WITH_ARGS (   SlotType)
Value:
WidgetArgsType& operator + (const typename SlotType::FArguments& ArgumentsForNewSlot) \
{ \
Slots.Add( new SlotType( ArgumentsForNewSlot ) ); \
return static_cast<WidgetArgsType*>(this)->Me(); \
}

Use this macro between SLATE_BEGIN_ARGS and SLATE_END_ARGS in order to add support for slots that have slate args.

◆ SLATE_USER_ARGS

#define SLATE_USER_ARGS (   WidgetType)
Value:
public: \
struct FArguments; \
struct FArguments : public TSlateBaseNamedArgs<WidgetType> \
{ \
typedef FArguments WidgetArgsType; \
FORCENOINLINE FArguments()
T * New(FMemStackBase &Mem, int32 Count=1, int32 Align=DEFAULT_ALIGNMENT)
Definition MemStack.h:259

Just like SLATE_BEGIN_ARGS but requires the user to implement the New() method in the .CPP. Allows for widget implementation details to be entirely reside in the .CPP file. e.g.

SMyWidget.h:

SLATE_USER_ARGS( SMyWidget ) {} SLATE_END_ARGS()

virtual void DoStuff() = nullptr;

SMyWidget.cpp:

namespace Implementation{ class SMyWidget : public SMyWidget{ void Construct( const FArguments& InArgs ) { SUserWidget::Construct( SUSerWidget::FArguments() [ SNew(STextBlock) .Text( "Implementation Details!" ) ] ); }

virtual void DoStuff() override {}

// Truly private. All handlers can be inlined (less boilerplate). // All private members are truly private. private: FReply OnButtonClicked { } TSharedPtr<SButton> MyButton; } }

◆ SNew

#define SNew (   WidgetType,
  ... 
)     MakeTDecl<WidgetType>( #WidgetType, __FILE__, __LINE__, RequiredArgs::MakeRequiredArgs(__VA_ARGS__) ) <<= TYPENAME_OUTSIDE_TEMPLATE WidgetType::FArguments()

Slate widgets are constructed through SNew and SAssignNew. e.g.

TSharedRef<SButton> MyButton = SNew(SButton);
   or
TSharedPtr<SButton> MyButton;
SAssignNew( MyButton, SButton );

Using SNew and SAssignNew ensures that widgets are populated

Function Documentation

◆ MakeTDecl()

template<typename WidgetType , typename RequiredArgsPayloadType >
TSlateDecl< WidgetType, RequiredArgsPayloadType > MakeTDecl ( const ANSICHAR InType,
const ANSICHAR InFile,
int32  OnLine,
RequiredArgsPayloadType &&  InRequiredArgs 
)