• UE5自定义插件创建UserWidget蓝图


    一、创建插件

            选择 编辑器工具栏按钮,插件名为 CreateWBP

    二、添加依赖

            打开 CreateWBP.Build.cs 添加依赖。

    UMG

    UMGEditor

    BlueprintGraph

    三、插件代码

            创建 CreateWBPMain.h 和 CreateWBPMain.cpp

    CreateWBPMain.h 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. class CreateWBPMain {
    4. public:
    5. // 主函数
    6. static int Main();
    7. // 创建用户控件蓝图
    8. static UWidgetBlueprint* CreateWidgetBlueprint(FString&, FString&, EObjectFlags = RF_NoFlags);
    9. // 编译蓝图
    10. static void CompileBlueprint(UBlueprint*);
    11. // 保存蓝图
    12. static void SavePackage(UPackage*);
    13. };

    CreateWBPMain.cpp 文件

    1. #include "CreateWBPMain.h"
    2. #include "WidgetBlueprintFactory.h"
    3. #include "AssetRegistry/AssetRegistryModule.h"
    4. #include "Blueprint/WidgetTree.h"
    5. #include "Kismet2/KismetEditorUtilities.h"
    6. #include "Kismet2/CompilerResultsLog.h"
    7. #include "BlueprintEditorSettings.h"
    8. #include "FileHelpers.h"
    9. /* 主函数 */
    10. int CreateWBPMain::Main() {
    11. // 随机用户控件蓝图名称。
    12. FString Guid = FGuid::NewGuid().ToString();
    13. FString WBPName = FString::Printf(TEXT("WBP_Test_%s"), *Guid);
    14. FString DirPath = "/Game/";
    15. FString WBPDirPath = DirPath + "WBP/";
    16. FString WBPPackage = WBPDirPath + WBPName;
    17. UE_LOG(LogTemp, Log, TEXT("CreateWBP 路径为: %s"), *WBPPackage);
    18. // 创建用户控件蓝图
    19. UWidgetBlueprint* Widget = CreateWBPMain::CreateWidgetBlueprint(WBPPackage, WBPName);
    20. // 编译用户控件蓝图
    21. CreateWBPMain::CompileBlueprint(Widget);
    22. // 保存用户控件蓝图
    23. CreateWBPMain::SavePackage(Widget->GetPackage());
    24. return 0;
    25. }
    26. /**
    27. * 创建用户控件蓝图
    28. * @param {WBPPackage} 蓝图路径
    29. * @param {WBPName} 蓝图名称
    30. * @param {ObjectFlags} 对象本身的标志
    31. * @return 用户控件蓝图指针
    32. */
    33. UWidgetBlueprint* CreateWBPMain::CreateWidgetBlueprint(FString& WBPPackage, FString& WBPName, EObjectFlags ObjectFlags) {
    34. UWidgetBlueprint* WidgetBlueprint = nullptr;
    35. // 检查蓝图是否存在
    36. FString WBPPath = WBPPackage + TEXT(".") + WBPName;
    37. WidgetBlueprint = Cast(StaticLoadObject(UWidgetBlueprint::StaticClass(), nullptr, *WBPPath));
    38. if (WidgetBlueprint) {
    39. UE_LOG(LogTemp, Warning, TEXT("控件蓝图已存在,路径:%s"), *WBPPath);
    40. // 清空组件
    41. if (WidgetBlueprint->WidgetTree->RootWidget) {
    42. WidgetBlueprint->WidgetTree->RemoveWidget(WidgetBlueprint->WidgetTree->RootWidget);
    43. WidgetBlueprint->Modify();
    44. }
    45. }
    46. else {
    47. // 创建用户控件蓝图
    48. UWidgetBlueprintFactory* WidgetFactory = NewObject();
    49. WidgetFactory->AddToRoot();
    50. UPackage* WidgetPackage = CreatePackage(*WBPPackage);
    51. WidgetBlueprint = Cast(WidgetFactory->FactoryCreateNew(UWidgetBlueprint::StaticClass(), WidgetPackage, FName(*WBPName), ObjectFlags, nullptr, nullptr));
    52. WidgetFactory->RemoveFromRoot();
    53. FAssetRegistryModule::AssetCreated(WidgetBlueprint);
    54. WidgetBlueprint->AddToRoot();
    55. }
    56. return WidgetBlueprint;
    57. }
    58. /**
    59. * 编译用户控件蓝图
    60. * @param {Blueprint} 用户控件蓝图指针
    61. */
    62. void CreateWBPMain::CompileBlueprint(UBlueprint* Blueprint) {
    63. FCompilerResultsLog LogResults;
    64. FString BlueprintPathName = Blueprint->GetPathName();
    65. UE_LOG(LogTemp, Log, TEXT("开始编译蓝图:%s"), *BlueprintPathName);
    66. LogResults.SetSourcePath(BlueprintPathName);
    67. LogResults.BeginEvent(*FString::Printf(TEXT("开始编译蓝图:%s"), *BlueprintPathName));
    68. LogResults.bLogDetailedResults = GetDefault()->bShowDetailedCompileResults;
    69. LogResults.EventDisplayThresholdMs = GetDefault()->CompileEventDisplayThresholdMs;
    70. FKismetEditorUtilities::CompileBlueprint(Blueprint, EBlueprintCompileOptions::None, &LogResults);
    71. }
    72. /**
    73. * 保存用户控件蓝图
    74. * @param {SaveObject} 用户控件蓝图指针
    75. */
    76. void CreateWBPMain::SavePackage(UPackage* Package) {
    77. FString PackagePathName = Package->GetPathName();
    78. UE_LOG(LogTemp, Log, TEXT("开始保存蓝图:%s"), *PackagePathName);
    79. TArray SavePackageArray;
    80. SavePackageArray.Add(Package);
    81. FEditorFileUtils::PromptForCheckoutAndSave(SavePackageArray, false, false);
    82. }

            *如果 CreateWBPMain.h 提示无法打开源文件"WidgetBlueprint.h"。

                     1、项目 -> DemoWBP属性

                    2、配置属性 -> VC++目录 -> 包含目录 -> 编辑

                     3、新行 -> C:\UnrealEngine\UE_5.0\Engine\Source\Editor\UMGEditor\Public

    相对路径是\Engine\Source\Editor\UMGEditor\Public,这里 C:\UnrealEngine\UE_5.0 需要替换成UE引擎的路径。

            在 CreateWBP.cpp 中导入刚创建的 CreateWBPMain.h

            在 CreateWBP.cpp 的 PluginButtonClicked() 方法中调用创建好的主函数。

     四、编译插件

            生成 -> 生成解决方案 

            *记得关掉UE引擎。 

    五、生成用户控件蓝图

    六、添加组件

    WidgetCommon.hpp 文件

    1. #pragma once
    2. #include "Engine/Font.h"
    3. #include "Sound/SoundWave.h"
    4. #include "WidgetBlueprint.h"
    5. class WidgetCommon {
    6. public:
    7. /**
    8. * 动态加载对象
    9. * @param {Path} 路径
    10. */
    11. template<typename T>
    12. static T* NewObject(const FString& Path) {
    13. // T* Object = Cast(StaticLoadObject(T::StaticClass(), nullptr, *Path));
    14. T* Object = LoadObject(nullptr, *Path);
    15. if (Object) {
    16. return Object;
    17. }
    18. return nullptr;
    19. }
    20. /**
    21. * 创建笔刷
    22. * @param {ResourceObject} 图像
    23. * @param {ImageSize} 图像大小
    24. * @param {TintColor} 着色
    25. * @param {DrawAs} 绘制为
    26. * ESlateBrushDrawType::Type::NoDrawType 无
    27. * ESlateBrushDrawType::Type::Box 盒体
    28. * ESlateBrushDrawType::Type::Border 边界
    29. * ESlateBrushDrawType::Type::Image 图像
    30. * ESlateBrushDrawType::Type::RoundedBox 圆形盒体
    31. * @param {Margin} 边缘(左、上、右、下)(只用于:盒体、边界)
    32. * @param {Tiling} 平铺(只用于:图像)
    33. * ESlateBrushTileType::Type::NoTile 无瓦片
    34. * ESlateBrushTileType::Type::Horizontal 水平
    35. * ESlateBrushTileType::Type::Vertical 垂直
    36. * ESlateBrushTileType::Type::Both 两者
    37. * @param {OutlineRadius} 轮廓设置 - 圆角半径
    38. * @param {OutlineColor} 轮廓设置 - 轮廓
    39. * @param {OutlineWidth} 轮廓设置 - 宽度
    40. * @param {OutlineRoundingType} 轮廓设置 - 舍入类型
    41. * ESlateBrushRoundingType::Type::FixedRadius 固定半径
    42. * ESlateBrushRoundingType::Type::HalfHeightRadius 半高半径
    43. * @param {OutlineUseBrushTransparency} 轮廓设置 - 使用笔刷透明度
    44. */
    45. static FSlateBrush CreateBrush(UObject* ResourceObject, FVector2D ImageSize, FSlateColor TintColor, ESlateBrushDrawType::Type DrawAs, FMargin Margin, ESlateBrushTileType::Type Tiling, FVector4 OutlineRadius, const FSlateColor& OutlineColor, float OutlineWidth, ESlateBrushRoundingType::Type OutlineRoundingType, bool OutlineUseBrushTransparency) {
    46. FSlateBrushOutlineSettings SlateBrushOutlineSettings(OutlineRadius, OutlineColor, OutlineWidth);
    47. SlateBrushOutlineSettings.RoundingType = OutlineRoundingType;
    48. SlateBrushOutlineSettings.bUseBrushTransparency = OutlineUseBrushTransparency;
    49. FSlateBrush SlateBrush;
    50. SlateBrush.SetResourceObject(ResourceObject);
    51. SlateBrush.SetImageSize(ImageSize);
    52. SlateBrush.TintColor = TintColor;
    53. SlateBrush.Margin = Margin;
    54. SlateBrush.Tiling = Tiling;
    55. SlateBrush.OutlineSettings = SlateBrushOutlineSettings;
    56. return SlateBrush;
    57. }
    58. /**
    59. * 创建字体
    60. * @param {FontObject} 字体族系
    61. * @param {TypefaceFontName} 字形
    62. * @param {Size} 尺寸
    63. * @param {LetterSpacing} 字间距
    64. * @param {FontMaterial} 字体材质
    65. * @param {OutlineSize} 轮廓设置 - 轮廓大小
    66. * @param {OutlineSeparateFillAlpha} 轮廓设置 - 单独填充透明度
    67. * @param {OutlineApplyOutlineToDropShadows} 轮廓设置 - 对投影应用轮廓
    68. * @param {OutlineMaterial} 轮廓设置 - 轮廓材质
    69. * @param {OutlineColor} 轮廓设置 - 轮廓颜色
    70. */
    71. static FSlateFontInfo CreateFont(const UFont* FontObject, FName TypefaceFontName, uint16 Size, int32 LetterSpacing, UMaterialInterface* FontMaterial, int32 OutlineSize, bool OutlineSeparateFillAlpha, bool OutlineApplyOutlineToDropShadows, UMaterialInterface* OutlineMaterial, FLinearColor OutlineColor) {
    72. FFontOutlineSettings FontOutlineSettings(OutlineSize, OutlineColor);
    73. FontOutlineSettings.bSeparateFillAlpha = OutlineSeparateFillAlpha;
    74. FontOutlineSettings.bApplyOutlineToDropShadows = OutlineApplyOutlineToDropShadows;
    75. FontOutlineSettings.OutlineMaterial = OutlineMaterial;
    76. FSlateFontInfo SlateFontInfo(FontObject, Size, TypefaceFontName, FontOutlineSettings);
    77. SlateFontInfo.LetterSpacing = LetterSpacing;
    78. SlateFontInfo.FontMaterial = FontMaterial;
    79. return SlateFontInfo;
    80. }
    81. /**
    82. * 创建音效
    83. * @param {SoundPath} 音效路径
    84. */
    85. static FSlateSound CreateSound(const FString& SoundPath) {
    86. USoundWave* SoundWave = WidgetCommon::NewObject(SoundPath);
    87. FSlateSound SlateSound;
    88. SlateSound.SetResourceObject(SoundWave);
    89. return SlateSound;
    90. }
    91. /**
    92. * 创建按钮样式
    93. * @param {Normal} 普通
    94. * @param {Hovered} 已悬停
    95. * @param {Pressed} 已按压
    96. * @param {Disabled} 已禁用
    97. * @param {NormalForeground} 正常前景
    98. * @param {HoveredForeground} 悬停的前景
    99. * @param {PressedForeground} 按下的前景
    100. * @param {DisabledForeground} 禁用的前景
    101. * @param {NormalPadding} 普通填充(左、上、右、下)
    102. * @param {PressedPadding} 按压填充(左、上、右、下)
    103. * @param {PressedSound} 按压音效
    104. * @param {HoveredSound} 悬停音效
    105. */
    106. static FButtonStyle CreateButtonStyle(const FSlateBrush& Normal, const FSlateBrush& Hovered, const FSlateBrush& Pressed, const FSlateBrush& Disabled, const FSlateColor& NormalForeground, const FSlateColor& HoveredForeground, const FSlateColor& PressedForeground, const FSlateColor& DisabledForeground, const FMargin& NormalPadding, const FMargin& PressedPadding, const FSlateSound& PressedSound, const FSlateSound& HoveredSound) {
    107. FButtonStyle ButtonStyle;
    108. ButtonStyle.SetNormal(Normal);
    109. ButtonStyle.SetHovered(Hovered);
    110. ButtonStyle.SetPressed(Pressed);
    111. ButtonStyle.SetDisabled(Disabled);
    112. ButtonStyle.SetNormalForeground(NormalForeground);
    113. ButtonStyle.SetHoveredForeground(HoveredForeground);
    114. ButtonStyle.SetPressedForeground(PressedForeground);
    115. ButtonStyle.SetDisabledForeground(DisabledForeground);
    116. ButtonStyle.SetNormalPadding(NormalPadding);
    117. ButtonStyle.SetPressedPadding(PressedPadding);
    118. ButtonStyle.SetPressedSound(PressedSound);
    119. ButtonStyle.SetHoveredSound(HoveredSound);
    120. return ButtonStyle;
    121. }
    122. /**
    123. * 创建勾选框样式
    124. * @param {CheckBoxType} 勾选框类型
    125. * ESlateCheckBoxType::Type::CheckBox 勾选框
    126. * ESlateCheckBoxType::Type::ToggleButton 切换按键
    127. * @param {UncheckedImage} 未勾选图像
    128. * @param {UncheckedHoveredImage} 未勾选悬停图像
    129. * @param {UncheckedPressedImage} 未勾选按压图像
    130. * @param {CheckedImage} 已勾选图像
    131. * @param {CheckedHoveredImage} 已勾选悬停图像
    132. * @param {CheckedPressedImage} 已勾选按压图像
    133. * @param {UndeterminedImage} 未确定图像
    134. * @param {UndeterminedHoveredImage} 未确定悬停图像
    135. * @param {UndeterminedPressedImage} 未确定按压图像
    136. * @param {Padding} 填充
    137. * @param {BackgroundImage} 背景图片
    138. * @param {BackgroundHoveredImage} 背景悬停图片
    139. * @param {BackgroundPressedImage} 背景按下图像
    140. * @param {ForegroundColor} 前景颜色
    141. * @param {HoveredForeground} 悬停前景
    142. * @param {PressedForeground} 按下前景
    143. * @param {CheckedForeground} 格子前景
    144. * @param {CheckedHoveredForeground} 格子悬停前景
    145. * @param {CheckedPressedForeground} 格子按下前景
    146. * @param {UndeterminedForeground} 未确定的前景
    147. * @param {BorderBackgroundColor} 边界背景颜色
    148. * @param {CheckedSound} 已勾选音效
    149. * @param {UncheckedSound} 未勾选音效
    150. * @param {HoveredSound} 悬停音效
    151. */
    152. static FCheckBoxStyle CreateCheckBoxStyle(const ESlateCheckBoxType::Type& CheckBoxType, const FSlateBrush& UncheckedImage, const FSlateBrush& UncheckedHoveredImage, const FSlateBrush& UncheckedPressedImage, const FSlateBrush& CheckedImage, const FSlateBrush& CheckedHoveredImage, const FSlateBrush& CheckedPressedImage, const FSlateBrush& UndeterminedImage, const FSlateBrush& UndeterminedHoveredImage, const FSlateBrush& UndeterminedPressedImage, const FMargin& Padding, const FSlateBrush& BackgroundImage, const FSlateBrush& BackgroundHoveredImage, const FSlateBrush& BackgroundPressedImage, const FSlateColor& ForegroundColor, const FSlateColor& HoveredForeground, const FSlateColor& PressedForeground, const FSlateColor& CheckedForeground, const FSlateColor& CheckedHoveredForeground, const FSlateColor& CheckedPressedForeground, const FSlateColor& UndeterminedForeground, const FSlateColor& BorderBackgroundColor, const FSlateSound& CheckedSound, const FSlateSound& UncheckedSound, const FSlateSound& HoveredSound) {
    153. FCheckBoxStyle CheckBoxStyle;
    154. CheckBoxStyle.SetCheckBoxType(CheckBoxType);
    155. CheckBoxStyle.SetUncheckedImage(UncheckedImage);
    156. CheckBoxStyle.SetUncheckedHoveredImage(UncheckedHoveredImage);
    157. CheckBoxStyle.SetUncheckedPressedImage(UncheckedPressedImage);
    158. CheckBoxStyle.SetCheckedImage(CheckedImage);
    159. CheckBoxStyle.SetCheckedHoveredImage(CheckedHoveredImage);
    160. CheckBoxStyle.SetCheckedPressedImage(CheckedPressedImage);
    161. CheckBoxStyle.SetUndeterminedImage(UndeterminedImage);
    162. CheckBoxStyle.SetUndeterminedHoveredImage(UndeterminedHoveredImage);
    163. CheckBoxStyle.SetUndeterminedPressedImage(UndeterminedPressedImage);
    164. CheckBoxStyle.SetPadding(Padding);
    165. CheckBoxStyle.SetBackgroundImage(BackgroundImage);
    166. CheckBoxStyle.SetBackgroundHoveredImage(BackgroundHoveredImage);
    167. CheckBoxStyle.SetBackgroundPressedImage(BackgroundPressedImage);
    168. CheckBoxStyle.SetForegroundColor(ForegroundColor);
    169. CheckBoxStyle.SetHoveredForegroundColor(HoveredForeground);
    170. CheckBoxStyle.SetPressedForegroundColor(PressedForeground);
    171. CheckBoxStyle.SetCheckedForegroundColor(CheckedForeground);
    172. CheckBoxStyle.SetCheckedHoveredForegroundColor(CheckedHoveredForeground);
    173. CheckBoxStyle.SetCheckedPressedForegroundColor(CheckedPressedForeground);
    174. CheckBoxStyle.SetUndeterminedForegroundColor(UndeterminedForeground);
    175. CheckBoxStyle.SetBorderBackgroundColor(BorderBackgroundColor);
    176. CheckBoxStyle.SetCheckedSound(CheckedSound);
    177. CheckBoxStyle.SetUncheckedSound(UncheckedSound);
    178. CheckBoxStyle.SetHoveredSound(HoveredSound);
    179. return CheckBoxStyle;
    180. }
    181. /**
    182. * 创建滚动条样式
    183. * @param {HorizontalBackgroundImage} 水平背景图
    184. * @param {VerticalBackgroundImage} 垂直背景图
    185. * @param {VerticalTopSlotImage} 垂直顶部插槽图像
    186. * @param {HorizontalTopSlotImage} 水平顶部插槽图像
    187. * @param {VerticalBottomSlotImage} 垂直底部插槽图像
    188. * @param {HorizontalBottomSlotImage} 水平底部插槽图像
    189. * @param {NormalThumbImage} 正常的缩略图
    190. * @param {HoveredThumbImage} 悬浮的缩略图
    191. * @param {DraggedThumbImage} 拖动的缩略图
    192. * @param {Thickness} 厚度
    193. */
    194. static FScrollBarStyle CreateScrollBarStyle(const FSlateBrush& HorizontalBackgroundImage, const FSlateBrush& VerticalBackgroundImage, const FSlateBrush& VerticalTopSlotImage, const FSlateBrush& HorizontalTopSlotImage, const FSlateBrush& VerticalBottomSlotImage, const FSlateBrush& HorizontalBottomSlotImage, const FSlateBrush& NormalThumbImage, const FSlateBrush& HoveredThumbImage, const FSlateBrush& DraggedThumbImage, const float& Thickness) {
    195. FScrollBarStyle ScrollBarStyle;
    196. ScrollBarStyle.SetHorizontalBackgroundImage(HorizontalBackgroundImage);
    197. ScrollBarStyle.SetVerticalBackgroundImage(VerticalBackgroundImage);
    198. ScrollBarStyle.SetVerticalTopSlotImage(VerticalTopSlotImage);
    199. ScrollBarStyle.SetHorizontalTopSlotImage(HorizontalTopSlotImage);
    200. ScrollBarStyle.SetVerticalBottomSlotImage(VerticalBottomSlotImage);
    201. ScrollBarStyle.SetHorizontalBottomSlotImage(HorizontalBottomSlotImage);
    202. ScrollBarStyle.SetNormalThumbImage(NormalThumbImage);
    203. ScrollBarStyle.SetHoveredThumbImage(HoveredThumbImage);
    204. ScrollBarStyle.SetDraggedThumbImage(DraggedThumbImage);
    205. ScrollBarStyle.SetThickness(Thickness);
    206. return ScrollBarStyle;
    207. }
    208. };

    WidgetBase.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/PanelWidget.h"
    5. #include "Kismet2/BlueprintEditorUtils.h"
    6. template <typename WidgetT = UWidget>
    7. class WidgetBase {
    8. public:
    9. UWidgetBlueprint* WidgetBlueprint;
    10. WidgetT* Widget;
    11. public:
    12. WidgetBase(UWidgetBlueprint* WidgetBlueprint) : WidgetBlueprint(WidgetBlueprint), Widget(nullptr) {}
    13. WidgetBase(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName): WidgetBlueprint(WidgetBlueprint), Widget(WidgetBlueprint->WidgetTree->ConstructWidget(WidgetT::StaticClass(), WidgetName)) {}
    14. virtual ~WidgetBase() {}
    15. public:
    16. virtual UWidget* FindWidget(const FName& WidgetName) {
    17. return this->WidgetBlueprint->WidgetTree->FindWidget(WidgetName);
    18. }
    19. virtual void AddToRoot() const noexcept {
    20. this->WidgetBlueprint->WidgetTree->RootWidget = this->Widget;
    21. }
    22. virtual UPanelWidget* GetParent() const noexcept {
    23. return this->Widget->GetParent();
    24. }
    25. virtual void RemoveFromParent() {
    26. this->Widget->RemoveFromParent();
    27. }
    28. // 是变量
    29. virtual void SetIsVariable(bool IsVariable) {
    30. this->Widget->bIsVariable = IsVariable;
    31. }
    32. // 行为 - 工具提示文本
    33. virtual void SetToolTipText(const FText& ToolTipText) {
    34. this->Widget->SetToolTipText(ToolTipText);
    35. }
    36. /**
    37. * 行为 - 已启用
    38. * 设置此控件能否被用户交互修改
    39. */
    40. virtual void SetIsEnabled(bool IsEnabled) {
    41. this->Widget->SetIsEnabled(IsEnabled);
    42. }
    43. /**
    44. * 行为 - 可视性。
    45. * ESlateVisibility::Visible (可视)
    46. * ESlateVisibility::Collapsed (已折叠)
    47. * ESlateVisibility::Hidden (隐藏)
    48. * ESlateVisibility::HitTestInvisible (非可命中测试(自身和所有子项))
    49. * ESlateVisibility::SelfHitTestInvisible (非可命中测试(仅自身))
    50. */
    51. virtual void SetVisibility(const ESlateVisibility& Visibility) {
    52. this->Widget->SetVisibility(Visibility);
    53. }
    54. // 行为 - 渲染不透明度
    55. virtual void SetRenderOpacity(const float& RenderOpacity) {
    56. this->Widget->SetRenderOpacity(RenderOpacity);
    57. }
    58. /**
    59. * 行为 - 高级 - 光标
    60. * EMouseCursor::Type::None (无)
    61. * EMouseCursor::Type::Default (默认)
    62. * EMouseCursor::Type::TextEditBeam (文本编辑光束)
    63. * EMouseCursor::Type::ResizeLeftRight (调整左右大小)
    64. * EMouseCursor::Type::ResizeUpDown (调整上下大小)
    65. * EMouseCursor::Type::ResizeSouthEast (调整南东大小)
    66. * EMouseCursor::Type::ResizeSouthWest (调整南西大小)
    67. * EMouseCursor::Type::CardinalCross (十字架)
    68. * EMouseCursor::Type::Crosshairs (十字准星)
    69. * EMouseCursor::Type::Hand (手)
    70. * EMouseCursor::Type::GrabHand (手抓取)
    71. * EMouseCursor::Type::GrabHandClosed (手抓取关闭)
    72. * EMouseCursor::Type::SlashedCircle (斜园)
    73. * EMouseCursor::Type::EyeDropper (滴管)
    74. * EMouseCursor::Type::Custom (自定义)
    75. */
    76. virtual void SetCursor(const EMouseCursor::Type& Cursor) {
    77. this->Widget->SetCursor(Cursor);
    78. }
    79. /**
    80. 渲染变换
    81. * @param {Translation} 变换 - 平移
    82. * @param {Scale} 变换 - 缩放
    83. * @param {Shear} 变换 - 修剪
    84. * @param {Angle} 变换 - 角度
    85. * @param {Pivot} 枢轴
    86. */
    87. virtual void SetRender(const FVector2D& Translation, const FVector2D& Scale, const FVector2D& Shear, const float& Angle, const FVector2D& Pivot) {
    88. FWidgetTransform Transform = FWidgetTransform(Translation, Scale, Shear, Angle);
    89. this->Widget->SetRenderTransform(Transform);
    90. // this->Widget->SetRenderTranslation(Translation);
    91. // this->Widget->SetRenderScale(Scale);
    92. // this->Widget->SetRenderShear(Shear);
    93. // this->Widget->SetRenderTransformAngle(Angle);
    94. this->Widget->SetRenderTransformPivot(Pivot);
    95. }
    96. // 性能 - 为易变
    97. virtual void ForceVolatile(bool Force) {
    98. this->Widget->ForceVolatile(Force);
    99. }
    100. /**
    101. * 裁剪 - 剪切
    102. * EWidgetClipping::Inherit (继承)
    103. * EWidgetClipping::ClipToBounds (剪切到边界)
    104. * EWidgetClipping::ClipToBoundsWithoutIntersecting (剪切到边界 - 无交互(高级))
    105. * EWidgetClipping::ClipToBoundsAlways (剪切到边界 - 固定(高级))
    106. * EWidgetClipping::OnDemand (按需(高级))
    107. */
    108. virtual void SetClipping(const EWidgetClipping& Clipping) {
    109. this->Widget->SetClipping(Clipping);
    110. }
    111. public:
    112. void AddInterface(const FName& InterfaceName) {
    113. const UClass* InterfaceClass = Cast(StaticFindObject(UClass::StaticClass(), ANY_PACKAGE, *InterfaceName.ToString()));
    114. bool bIsExist = false;
    115. for (auto InterfaceItem : this->WidgetBlueprint->ImplementedInterfaces) {
    116. if (InterfaceItem.Interface == InterfaceClass) {
    117. bIsExist = true;
    118. break;
    119. }
    120. }
    121. if (!bIsExist) {
    122. FBlueprintEditorUtils::ImplementNewInterface(this->WidgetBlueprint, InterfaceName);
    123. }
    124. }
    125. };

    WidgetPanel.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/PanelWidget.h"
    5. #include "WidgetBase.hpp"
    6. template <typename WidgetT = UPanelWidget>
    7. class WidgetPanel : public WidgetBase {
    8. public:
    9. WidgetPanel(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetBase(WidgetBlueprint, WidgetName) {}
    10. virtual ~WidgetPanel() {}
    11. public:
    12. virtual void AddChild(UWidget* ChildWidget) {
    13. this->Widget->AddChild(ChildWidget);
    14. }
    15. virtual void RemoveChild(UWidget* ChildWidget) {
    16. this->Widget->RemoveChild(ChildWidget);
    17. }
    18. };

    WidgetContent.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/ContentWidget.h"
    5. #include "WidgetPanel.hpp"
    6. template <typename WidgetT = UContentWidget>
    7. class WidgetContent : public WidgetPanel {
    8. public:
    9. WidgetContent(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetPanel(WidgetBlueprint, WidgetName) {}
    10. virtual ~WidgetContent() {}
    11. public:
    12. virtual void SetContent(UWidget* ChildWidget) {
    13. this->Widget->SetContent(ChildWidget);
    14. }
    15. };

    1、面板类型组件

    WidgetCanvasPanel.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/CanvasPanel.h"
    5. #include "Components/CanvasPanelSlot.h"
    6. #include "WidgetPanel.hpp"
    7. class WidgetCanvasPanel : public WidgetPanel {
    8. public:
    9. WidgetCanvasPanel(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetPanel(WidgetBlueprint, WidgetName) {}
    10. ~WidgetCanvasPanel() {}
    11. public:
    12. /**
    13. * 插槽(画布面板插槽)
    14. * @param {ChildWidget} 插槽中的Widget。
    15. * @param {Anchors} 锚点 (最小X、 最小Y、 最大X、 最大Y)
    16. * @param {Position} 位置 (位置X(偏移左侧)、 位置Y(偏移顶部))
    17. * @param {Size} 尺寸 (尺寸X(偏移右侧)、尺寸Y(偏移底部))
    18. * @param {Alignment} 对齐
    19. * @param {AutoSize} 大小到内容
    20. * @param {ZOrder} ZOrder
    21. */
    22. void SetSlot(UWidget* ChildWidget, const FAnchors& Anchors, const FVector2D& Position, const FVector2D& Size, const FVector2D& Alignment, bool AutoSize, const int32& ZOrder) {
    23. UCanvasPanelSlot* Slot = Cast(ChildWidget->Slot);
    24. FAnchorData AnchorData;
    25. FMargin Margin(Position.X, Position.Y, Size.X, Size.Y);
    26. AnchorData.Offsets = Margin;
    27. AnchorData.Anchors = Anchors;
    28. AnchorData.Alignment = Alignment;
    29. Slot->SetLayout(AnchorData);
    30. // Slot->SetAnchors(Anchors);
    31. // Slot->SetPosition(Position);
    32. // Slot->SetSize(Size);
    33. // Slot->SetAlignment(Alignment);
    34. Slot->SetAutoSize(AutoSize);
    35. Slot->SetZOrder(ZOrder);
    36. }
    37. };

    WidgetOverlay.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/Overlay.h"
    5. #include "Components/OverlaySlot.h"
    6. #include "WidgetPanel.hpp"
    7. class WidgetOverlay : public WidgetPanel {
    8. public:
    9. WidgetOverlay(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetPanel(WidgetBlueprint, WidgetName) {}
    10. ~WidgetOverlay() {}
    11. public:
    12. /**
    13. * 插槽(覆层插槽)
    14. * @param {ChildWidget} 插槽中的Widget。
    15. * @param {Padding} 填充 (左、 上、 右、 下)
    16. * @param {HorizontalAlignment} 水平对齐
    17. * EHorizontalAlignment::HAlign_Left 向左
    18. * EHorizontalAlignment::HAlign_Center 居中
    19. * EHorizontalAlignment::HAlign_Right 向右
    20. * EHorizontalAlignment::HAlign_Fill 水平填充
    21. * @param {VerticalAlignment} 垂直对齐
    22. * EVerticalAlignment::VAlign_Top 向上
    23. * EVerticalAlignment::VAlign_Center 居中
    24. * EVerticalAlignment::VAlign_Bottom 向下
    25. * EVerticalAlignment::VAlign_Fill 垂直填充
    26. */
    27. void SetSlot(UWidget* ChildWidget, const FMargin& Padding, const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment) {
    28. UOverlaySlot* Slot = Cast(ChildWidget->Slot);
    29. Slot->SetPadding(Padding);
    30. Slot->SetHorizontalAlignment(HorizontalAlignment);
    31. Slot->SetVerticalAlignment(VerticalAlignment);
    32. }
    33. };

    WidgetHorizontalBox.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/HorizontalBox.h"
    5. #include "Components/HorizontalBoxSlot.h"
    6. #include "WidgetPanel.hpp"
    7. class WidgetHorizontalBox : public WidgetPanel {
    8. public:
    9. WidgetHorizontalBox(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetPanel(WidgetBlueprint, WidgetName) {}
    10. ~WidgetHorizontalBox() {}
    11. public:
    12. /**
    13. * 插槽(水平框插槽)
    14. * @param {ChildWidget} 插槽中的Widget。
    15. * @param {Padding} 填充 (左、 上、 右、 下)
    16. * @param {Size} 尺寸
    17. * FSlateChildSize(ESlateSizeRule::Automatic) 自动
    18. * FSlateChildSize(ESlateSizeRule::Fill) 填充(默认为1.0,如需更改,设置 Value 值。)
    19. * @param {HorizontalAlignment} 水平对齐
    20. * EHorizontalAlignment::HAlign_Left 向左
    21. * EHorizontalAlignment::HAlign_Center 居中
    22. * EHorizontalAlignment::HAlign_Right 向右
    23. * EHorizontalAlignment::HAlign_Fill 水平填充
    24. * @param {VerticalAlignment} 垂直对齐
    25. * EVerticalAlignment::VAlign_Top 向上
    26. * EVerticalAlignment::VAlign_Center 居中
    27. * EVerticalAlignment::VAlign_Bottom 向下
    28. * EVerticalAlignment::VAlign_Fill 垂直填充
    29. */
    30. void SetSlot(UWidget* ChildWidget, const FMargin& Padding, const FSlateChildSize& Size, const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment) {
    31. UHorizontalBoxSlot* Slot = Cast(ChildWidget->Slot);
    32. Slot->SetPadding(Padding);
    33. Slot->SetSize(Size);
    34. Slot->SetHorizontalAlignment(HorizontalAlignment);
    35. Slot->SetVerticalAlignment(VerticalAlignment);
    36. }
    37. };

    WidgetVerticalBox.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/VerticalBox.h"
    5. #include "Components/VerticalBoxSlot.h"
    6. #include "WidgetPanel.hpp"
    7. class WidgetVerticalBox : public WidgetPanel {
    8. public:
    9. WidgetVerticalBox(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetPanel(WidgetBlueprint, WidgetName) {}
    10. ~WidgetVerticalBox() {}
    11. public:
    12. /**
    13. * 插槽(垂直框插槽)
    14. * @param {ChildWidget} 插槽中的Widget。
    15. * @param {Padding} 填充 (左、 上、 右、 下)
    16. * @param {Size} 尺寸
    17. * FSlateChildSize(ESlateSizeRule::Automatic) 自动
    18. * FSlateChildSize(ESlateSizeRule::Fill) 填充(默认为1.0,如需更改,设置 Value 值。)
    19. * @param {HorizontalAlignment} 水平对齐
    20. * EHorizontalAlignment::HAlign_Left 向左
    21. * EHorizontalAlignment::HAlign_Center 居中
    22. * EHorizontalAlignment::HAlign_Right 向右
    23. * EHorizontalAlignment::HAlign_Fill 水平填充
    24. * @param {VerticalAlignment} 垂直对齐
    25. * EVerticalAlignment::VAlign_Top 向上
    26. * EVerticalAlignment::VAlign_Center 居中
    27. * EVerticalAlignment::VAlign_Bottom 向下
    28. * EVerticalAlignment::VAlign_Fill 垂直填充
    29. */
    30. void SetSlot(UWidget* ChildWidget, const FMargin& Padding, const FSlateChildSize& Size, const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment) {
    31. UVerticalBoxSlot* Slot = Cast(ChildWidget->Slot);
    32. Slot->SetPadding(Padding);
    33. Slot->SetSize(Size);
    34. Slot->SetHorizontalAlignment(HorizontalAlignment);
    35. Slot->SetVerticalAlignment(VerticalAlignment);
    36. }
    37. };

    WidgetUniformGridPanel.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/UniformGridPanel.h"
    5. #include "Components/UniformGridSlot.h"
    6. #include "WidgetPanel.hpp"
    7. class WidgetUniformGridPanel : public WidgetPanel {
    8. public:
    9. WidgetUniformGridPanel(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetPanel(WidgetBlueprint, WidgetName) {}
    10. ~WidgetUniformGridPanel() {}
    11. public:
    12. /**
    13. * 插槽(统一网格插槽)
    14. * @param {ChildWidget} 插槽中的Widget。
    15. * @param {HorizontalAlignment} 水平对齐
    16. * EHorizontalAlignment::HAlign_Left 向左
    17. * EHorizontalAlignment::HAlign_Center 居中
    18. * EHorizontalAlignment::HAlign_Right 向右
    19. * EHorizontalAlignment::HAlign_Fill 水平填充
    20. * @param {VerticalAlignment} 垂直对齐
    21. * EVerticalAlignment::VAlign_Top 向上
    22. * EVerticalAlignment::VAlign_Center 居中
    23. * EVerticalAlignment::VAlign_Bottom 向下
    24. * EVerticalAlignment::VAlign_Fill 垂直填充
    25. * @param {Row} 行
    26. * @param {Column} 列
    27. */
    28. void SetSlot(UWidget* ChildWidget, const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment, const int32& Row, const int32& Column) {
    29. UUniformGridSlot* Slot = Cast(ChildWidget->Slot);
    30. Slot->SetHorizontalAlignment(HorizontalAlignment);
    31. Slot->SetVerticalAlignment(VerticalAlignment);
    32. Slot->SetRow(Row);
    33. Slot->SetColumn(Column);
    34. }
    35. /**
    36. * 子布局
    37. * @param {SlotPadding} 插槽填充(左、上、右、下)
    38. * @param {MinDesiredSlotWidth} 所需最小插槽宽度
    39. * @param {MinDesiredSlotHeight} 所需最小插槽高度
    40. */
    41. void SetSubLayout(const FMargin& SlotPadding, const float& MinDesiredSlotWidth, const float& MinDesiredSlotHeight) {
    42. this->Widget->SetSlotPadding(SlotPadding);
    43. this->Widget->SetMinDesiredSlotWidth(MinDesiredSlotWidth);
    44. this->Widget->SetMinDesiredSlotHeight(MinDesiredSlotHeight);
    45. }
    46. };

    WidgetScrollBox.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/ScrollBox.h"
    5. #include "Components/ScrollBoxSlot.h"
    6. #include "WidgetPanel.hpp"
    7. class WidgetScrollBox : public WidgetPanel {
    8. public:
    9. WidgetScrollBox(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetPanel(WidgetBlueprint, WidgetName) {}
    10. ~WidgetScrollBox() {}
    11. public:
    12. /**
    13. * 插槽(滚动框插槽)
    14. * @param {ChildWidget} 插槽中的Widget。
    15. * @param {Padding} 填充 (左、 上、 右、 下)
    16. * @param {HorizontalAlignment} 水平对齐
    17. * EHorizontalAlignment::HAlign_Left 向左
    18. * EHorizontalAlignment::HAlign_Center 居中
    19. * EHorizontalAlignment::HAlign_Right 向右
    20. * EHorizontalAlignment::HAlign_Fill 水平填充
    21. * @param {VerticalAlignment} 垂直对齐
    22. * EVerticalAlignment::VAlign_Top 向上
    23. * EVerticalAlignment::VAlign_Center 居中
    24. * EVerticalAlignment::VAlign_Bottom 向下
    25. * EVerticalAlignment::VAlign_Fill 垂直填充
    26. */
    27. void SetSlot(UWidget* ChildWidget, const FMargin& Padding, const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment) {
    28. UScrollBoxSlot* Slot = Cast(ChildWidget->Slot);
    29. Slot->SetPadding(Padding);
    30. Slot->SetHorizontalAlignment(HorizontalAlignment);
    31. Slot->SetVerticalAlignment(VerticalAlignment);
    32. }
    33. /**
    34. * 滚动
    35. * @param {Orientation} 朝向
    36. * EOrientation::Orient_Horizontal 水平
    37. * EOrientation::Orient_Vertical 垂直
    38. * @param {ScrollBarVisibility} 滚动条可视性
    39. * ESlateVisibility::Visible 可视
    40. * ESlateVisibility::Collapsed 已折叠
    41. * ESlateVisibility::Hidden 隐藏)
    42. * ESlateVisibility::HitTestInvisible 非可命中测试(自身和所有子项)
    43. * ESlateVisibility::SelfHitTestInvisible 非可命中测试(仅自身)
    44. * @param {ConsumeMouseWheel} 消耗鼠标滚轮
    45. * EConsumeMouseWheel::WhenScrollingPossible 可以滚动时
    46. * EConsumeMouseWheel::Always 固定
    47. * EConsumeMouseWheel::Never 永不
    48. * @param {ScrollbarThickness} 滚动条厚度(X, Y)
    49. * @param {ScrollbarPadding} 滚动条填充(左、上、右、下)
    50. * @param {AlwaysShowScrollbar} 固定显示滚动条
    51. * @param {AllowOverscroll} 允许过度滚动
    52. * @param {ShouldAnimateWheelScrolling} 动画滚轮滚动
    53. * @param {NavigationDestination} 导航目标
    54. * EDescendantScrollDestination::IntoView 进入视图
    55. * EDescendantScrollDestination::TopOrLeft 顶部或左侧
    56. * EDescendantScrollDestination::Center 居中
    57. * EDescendantScrollDestination::BottomOrRight 底部或右侧
    58. * @param {ScrollWhenFocusChanges} 聚焦变化时滚动
    59. * EScrollWhenFocusChanges::NoScroll 无滚动
    60. * EScrollWhenFocusChanges::InstantScroll 即时滚动
    61. * EScrollWhenFocusChanges::AnimatedScroll 动画滚动
    62. * @param {WheelScrollMultiplier} 滚轮滚动乘数
    63. */
    64. void SetScroll(const EOrientation& Orientation, const ESlateVisibility& ScrollBarVisibility, const EConsumeMouseWheel& ConsumeMouseWheel, const FVector2D& ScrollbarThickness, const FMargin& ScrollbarPadding, bool AlwaysShowScrollbar, bool AllowOverscroll, bool ShouldAnimateWheelScrolling, const EDescendantScrollDestination& NavigationDestination, const EScrollWhenFocusChanges& ScrollWhenFocusChanges, const float& WheelScrollMultiplier) {
    65. this->Widget->SetOrientation(Orientation);
    66. this->Widget->SetScrollBarVisibility(ScrollBarVisibility);
    67. this->Widget->SetConsumeMouseWheel(ConsumeMouseWheel);
    68. this->Widget->SetScrollbarThickness(ScrollbarThickness);
    69. this->Widget->SetScrollbarPadding(ScrollbarPadding);
    70. this->Widget->SetAlwaysShowScrollbar(AlwaysShowScrollbar);
    71. this->Widget->SetAllowOverscroll(AllowOverscroll);
    72. this->Widget->SetAnimateWheelScrolling(ShouldAnimateWheelScrolling);
    73. this->Widget->SetNavigationDestination(NavigationDestination);
    74. this->Widget->SetScrollWhenFocusChanges(ScrollWhenFocusChanges);
    75. this->Widget->SetWheelScrollMultiplier(WheelScrollMultiplier);
    76. }
    77. };

    WidgetSizeBox.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/SizeBox.h"
    5. #include "Components/SizeBoxSlot.h"
    6. #include "WidgetPanel.hpp"
    7. class WidgetSizeBox : public WidgetPanel {
    8. public:
    9. WidgetSizeBox(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetPanel(WidgetBlueprint, WidgetName) {}
    10. ~WidgetSizeBox() {}
    11. public:
    12. /**
    13. * 插槽(尺寸框插槽)
    14. * @param {ChildWidget} 插槽中的Widget。
    15. * @param {Padding} 填充 (左、 上、 右、 下)
    16. * @param {HorizontalAlignment} 水平对齐
    17. * EHorizontalAlignment::HAlign_Left 向左
    18. * EHorizontalAlignment::HAlign_Center 居中
    19. * EHorizontalAlignment::HAlign_Right 向右
    20. * EHorizontalAlignment::HAlign_Fill 水平填充
    21. * @param {VerticalAlignment} 垂直对齐
    22. * EVerticalAlignment::VAlign_Top 向上
    23. * EVerticalAlignment::VAlign_Center 居中
    24. * EVerticalAlignment::VAlign_Bottom 向下
    25. * EVerticalAlignment::VAlign_Fill 垂直填充
    26. */
    27. void SetSlot(UWidget* ChildWidget, const FMargin& Padding, const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment) {
    28. USizeBoxSlot* Slot = Cast(ChildWidget->Slot);
    29. Slot->SetPadding(Padding);
    30. Slot->SetHorizontalAlignment(HorizontalAlignment);
    31. Slot->SetVerticalAlignment(VerticalAlignment);
    32. }
    33. /**
    34. * 子布局
    35. * @param {WidthOverride} 宽度重载
    36. * @param {HeightOverride} 高度重载
    37. * @param {MinDesiredWidth} 所需最小宽度
    38. * @param {MinDesiredHeight} 所需最小高度
    39. * @param {MaxDesiredWidth} 所需最大宽度
    40. * @param {MaxDesiredHeight} 所需最大高度
    41. * @param {MinAspectRatio} 最小高宽比
    42. * @param {MaxAspectRatio} 最大高宽比
    43. */
    44. void SetSubLayout(const float& WidthOverride, const float& HeightOverride, const float& MinDesiredWidth, const float& MinDesiredHeight, const float& MaxDesiredWidth, const float& MaxDesiredHeight, const float& MinAspectRatio, const float& MaxAspectRatio) {
    45. this->Widget->SetWidthOverride(WidthOverride);
    46. this->Widget->SetHeightOverride(HeightOverride);
    47. this->Widget->SetMinDesiredWidth(MinDesiredWidth);
    48. this->Widget->SetMinDesiredHeight(MinDesiredHeight);
    49. this->Widget->SetMaxDesiredWidth(MaxDesiredWidth);
    50. this->Widget->SetMaxDesiredHeight(MaxDesiredHeight);
    51. this->Widget->SetMinAspectRatio(MinAspectRatio);
    52. this->Widget->SetMaxAspectRatio(MaxAspectRatio);
    53. }
    54. };

    WidgetSwitcher.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/WidgetSwitcher.h"
    5. #include "Components/WidgetSwitcherSlot.h"
    6. #include "WidgetPanel.hpp"
    7. class WidgetSwitcher : public WidgetPanel {
    8. public:
    9. WidgetSwitcher(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetPanel(WidgetBlueprint, WidgetName) {}
    10. ~WidgetSwitcher() {}
    11. public:
    12. /**
    13. * 插槽(控件切换器插槽)
    14. * @param {ChildWidget} 插槽中的Widget。
    15. * @param {Padding} 填充 (左、 上、 右、 下)
    16. * @param {HorizontalAlignment} 水平对齐
    17. * EHorizontalAlignment::HAlign_Left 向左
    18. * EHorizontalAlignment::HAlign_Center 居中
    19. * EHorizontalAlignment::HAlign_Right 向右
    20. * EHorizontalAlignment::HAlign_Fill 水平填充
    21. * @param {VerticalAlignment} 垂直对齐
    22. * EVerticalAlignment::VAlign_Top 向上
    23. * EVerticalAlignment::VAlign_Center 居中
    24. * EVerticalAlignment::VAlign_Bottom 向下
    25. * EVerticalAlignment::VAlign_Fill 垂直填充
    26. */
    27. void SetSlot(UWidget* ChildWidget, const FMargin& Padding, const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment) {
    28. UWidgetSwitcherSlot* Slot = Cast(ChildWidget->Slot);
    29. Slot->SetPadding(Padding);
    30. Slot->SetHorizontalAlignment(HorizontalAlignment);
    31. Slot->SetVerticalAlignment(VerticalAlignment);
    32. }
    33. /**
    34. * 切换器
    35. * @param {ActiveWidgetIndex} 激活控件索引
    36. */
    37. void SetSwitcher(const int32& ActiveWidgetIndex) {
    38. this->Widget->SetActiveWidgetIndex(ActiveWidgetIndex);
    39. }
    40. /**
    41. * 切换器
    42. * @param {ActiveWidget} 激活控件
    43. */
    44. void SetSwitcher(UWidget* ActiveWidget) {
    45. this->Widget->SetActiveWidget(ActiveWidget);
    46. }
    47. };

    WidgetScaleBox.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/ScaleBox.h"
    5. #include "Components/ScaleBoxSlot.h"
    6. #include "WidgetContent.hpp"
    7. class WidgetScaleBox : public WidgetContent {
    8. public:
    9. WidgetScaleBox(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetContent(WidgetBlueprint, WidgetName) {}
    10. ~WidgetScaleBox() {}
    11. public:
    12. /**
    13. * 插槽(缩放框插槽)
    14. * @param {ChildWidget} 插槽中的Widget。
    15. * @param {Padding} 填充 (左、 上、 右、 下)
    16. * @param {HorizontalAlignment} 水平对齐
    17. * EHorizontalAlignment::HAlign_Left 向左
    18. * EHorizontalAlignment::HAlign_Center 居中
    19. * EHorizontalAlignment::HAlign_Right 向右
    20. * EHorizontalAlignment::HAlign_Fill 水平填充
    21. * @param {VerticalAlignment} 垂直对齐
    22. * EVerticalAlignment::VAlign_Top 向上
    23. * EVerticalAlignment::VAlign_Center 居中
    24. * EVerticalAlignment::VAlign_Bottom 向下
    25. * EVerticalAlignment::VAlign_Fill 垂直填充
    26. */
    27. void SetSlot(UWidget* ChildWidget, const FMargin& Padding, const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment) {
    28. UScaleBoxSlot* Slot = Cast(ChildWidget->Slot);
    29. Slot->SetPadding(Padding);
    30. Slot->SetHorizontalAlignment(HorizontalAlignment);
    31. Slot->SetVerticalAlignment(VerticalAlignment);
    32. }
    33. /**
    34. * 伸展
    35. * @param {Stretch} 拉伸
    36. * EStretch::Type::None 无
    37. * EStretch::Type::Fill 填充
    38. * EStretch::Type::ScaleToFit 缩放以匹配
    39. * EStretch::Type::ScaleToFitX 缩放以匹配X
    40. * EStretch::Type::ScaleToFitY 缩放以匹配Y
    41. * EStretch::Type::ScaleToFill 缩放以填充
    42. * EStretch::Type::ScaleBySafeZone 按安全区缩放
    43. * EStretch::Type::UserSpecified 用户指定
    44. * @param {StretchDirection} 拉伸方向
    45. * EStretchDirection::Type::Both 两者
    46. * EStretchDirection::Type::DownOnly 仅向下
    47. * EStretchDirection::Type::UpOnly 仅向上
    48. * @param {UserSpecifiedScale} 用户指定缩放
    49. * @param {IgnoreInheritedScale} 忽略继承的缩放
    50. */
    51. void SetStretch(const EStretch::Type& Stretch, const EStretchDirection::Type& StretchDirection, const float& UserSpecifiedScale, bool IgnoreInheritedScale) {
    52. this->Widget->SetStretch(Stretch);
    53. this->Widget->SetStretchDirection(StretchDirection);
    54. this->Widget->SetUserSpecifiedScale(UserSpecifiedScale);
    55. this->Widget->SetIgnoreInheritedScale(IgnoreInheritedScale);
    56. }
    57. };

    WidgetSafeZone.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Widget.h"
    4. #include "Components/SafeZone.h"
    5. #include "Components/SafeZoneSlot.h"
    6. #include "WidgetContent.hpp"
    7. class WidgetSafeZone : public WidgetContent {
    8. public:
    9. WidgetSafeZone(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetContent(WidgetBlueprint, WidgetName) {}
    10. ~WidgetSafeZone() {}
    11. public:
    12. /**
    13. * 插槽(安全区插槽)
    14. * @param {ChildWidget} 插槽中的Widget。
    15. * @param {IsTitleSafe} 为标题安全
    16. * @param {SafeAreaScale} 安全区范围 (左、 上、 右、 下)
    17. * @param {HAlign} H对齐
    18. * EHorizontalAlignment::HAlign_Left 向左
    19. * EHorizontalAlignment::HAlign_Center 居中
    20. * EHorizontalAlignment::HAlign_Right 向右
    21. * EHorizontalAlignment::HAlign_Fill 水平填充
    22. * @param {VAlign} V对齐
    23. * EVerticalAlignment::VAlign_Top 向上
    24. * EVerticalAlignment::VAlign_Center 居中
    25. * EVerticalAlignment::VAlign_Bottom 向下
    26. * EVerticalAlignment::VAlign_Fill 垂直填充
    27. * @param {Padding} 填充 (左、 上、 右、 下)
    28. */
    29. void SetSlot(UWidget* ChildWidget, bool IsTitleSafe, const FMargin& SafeAreaScale, const EHorizontalAlignment& HAlign, const EVerticalAlignment& VAlign, const FMargin& Padding) {
    30. USafeZoneSlot* Slot = Cast(ChildWidget->Slot);
    31. Slot->bIsTitleSafe = IsTitleSafe;
    32. Slot->SafeAreaScale = SafeAreaScale;
    33. Slot->HAlign = HAlign;
    34. Slot->VAlign = VAlign;
    35. Slot->Padding = Padding;
    36. }
    37. /**
    38. * 安全区
    39. * @param {PadLeft} 填充左侧
    40. * @param {PadRight} 填充右侧
    41. * @param {PadTop} 填充顶部
    42. * @param {PadBottom} 填充底部
    43. */
    44. void SetSidesToPad(bool PadLeft, bool PadRight, bool PadTop, bool PadBottom) {
    45. this->Widget->SetSidesToPad(PadLeft, PadRight, PadTop, PadBottom);
    46. }
    47. };

    2、通用类型组件

    WidgetTextBlock.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/TextBlock.h"
    4. #include "WidgetBase.hpp"
    5. class WidgetTextBlock : public WidgetBase {
    6. public:
    7. WidgetTextBlock(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetBase(WidgetBlueprint, WidgetName) {}
    8. ~WidgetTextBlock() {}
    9. public:
    10. /**
    11. * 内容
    12. * @param {Text} 文本。
    13. */
    14. void SetText(const FText& Text) {
    15. this->Widget->SetText(Text);
    16. }
    17. /**
    18. * 外观
    19. * @param {ColorAndOpacity} 颜色和不透明度
    20. * @param {FontInfo} 字体
    21. * @param {StrikeBrush} 删除线
    22. * @param {ShadowOffset} 阴影偏移
    23. * @param {ShadowColorAndOpacity} 阴影颜色
    24. * @param {MinDesiredWidth} 所需最小宽度
    25. * @param {TransformPolicy} 变换规则
    26. * ETextTransformPolicy::None 无
    27. * ETextTransformPolicy::ToLower 到较低
    28. * ETextTransformPolicy::ToUpper 到较高
    29. * @param {Justification} 对齐
    30. * ETextJustify::Type::Left 左
    31. * ETextJustify::Type::Center 中
    32. * ETextJustify::Type::Right 右
    33. */
    34. void SetAppearance(const FSlateColor& ColorAndOpacity, const FSlateFontInfo& FontInfo, const FSlateBrush& StrikeBrush, const FVector2D& ShadowOffset, const FLinearColor& ShadowColorAndOpacity, const float& MinDesiredWidth, const ETextTransformPolicy& TransformPolicy, const ETextJustify::Type& Justification) {
    35. this->Widget->SetColorAndOpacity(ColorAndOpacity);
    36. this->Widget->SetFont(FontInfo);
    37. this->Widget->SetStrikeBrush(StrikeBrush);
    38. this->Widget->SetShadowOffset(ShadowOffset);
    39. this->Widget->SetShadowColorAndOpacity(ShadowColorAndOpacity);
    40. this->Widget->SetMinDesiredWidth(MinDesiredWidth);
    41. this->Widget->SetTextTransformPolicy(TransformPolicy);
    42. this->Widget->SetJustification(Justification);
    43. }
    44. /**
    45. * 换行
    46. * @param {AutoTextWrap} 自动包裹文本
    47. */
    48. void SetWrap(bool AutoTextWrap) {
    49. this->Widget->SetAutoWrapText(AutoTextWrap);
    50. }
    51. /**
    52. * 裁剪
    53. * @param {OverflowPolicy} 高级 - 溢出策略
    54. * ETextOverflowPolicy::Clip 剪切
    55. * ETextOverflowPolicy::Ellipsis 省略
    56. */
    57. void SetOverflow(const ETextOverflowPolicy& OverflowPolicy) {
    58. this->Widget->SetTextOverflowPolicy(OverflowPolicy);
    59. }
    60. /**
    61. * 设置不透明度
    62. * @param {Opacity} 不透明度(单独设置 颜色和不透明度 中的不透明度)
    63. */
    64. void SetOpacity(const float& Opacity) {
    65. this->Widget->SetOpacity(Opacity);
    66. }
    67. };

    WidgetRichTextBlock.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Engine/DataTable.h"
    4. #include "Components/RichTextBlock.h"
    5. #include "WidgetBase.hpp"
    6. class WidgetRichTextBlock : public WidgetBase {
    7. public:
    8. WidgetRichTextBlock(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetBase(WidgetBlueprint, WidgetName) {}
    9. ~WidgetRichTextBlock() {}
    10. public:
    11. /**
    12. * 内容
    13. * @param {Text} 文本。
    14. */
    15. void SetText(const FText& Text) {
    16. this->Widget->SetText(Text);
    17. }
    18. /**
    19. * 外观
    20. * @param {TextStyleSet} 文本样式集
    21. * @param {DefaultFont} 默认文本样式覆盖 - 字体
    22. * @param {DefaultColorAndOpacity} 默认文本样式覆盖 - 颜色
    23. * @param {DefaultShadowOffset} 默认文本样式覆盖 - 阴影偏移
    24. * @param {DefaultShadowColorAndOpacity} 默认文本样式覆盖 - 阴影颜色和不透明度
    25. * @param {DefaultSelectedBackgroundColor} 默认文本样式覆盖 - 选定背景颜色
    26. * @param {DefaultHighlightColor} 默认文本样式覆盖 - 高亮颜色
    27. * @param {DefaultHighlightShape} 默认文本样式覆盖 - 高亮形状
    28. * @param {DefaultStrikeBrush} 默认文本样式覆盖 - 删除线
    29. * @param {DefaultUnderlineBrush} 默认文本样式覆盖 - 下划线笔刷
    30. * @param {DefaultTransformPolicy} 默认文本样式覆盖 - 变换规则
    31. * ETextTransformPolicy::None 无
    32. * ETextTransformPolicy::ToLower 到较低
    33. * ETextTransformPolicy::ToUpper 到较高
    34. * @param {DefaultOverflowPolicy} 默认文本样式覆盖 - 溢出策略
    35. * ETextOverflowPolicy::Clip 剪切
    36. * ETextOverflowPolicy::Ellipsis 省略
    37. * @param {MinDesiredWidth} 所需最小宽度
    38. * @param {TransformPolicy} 变换规则
    39. * ETextTransformPolicy::None 无
    40. * ETextTransformPolicy::ToLower 到较低
    41. * ETextTransformPolicy::ToUpper 到较高
    42. * @param {Justification} 对齐
    43. * ETextJustify::Type::Left 左
    44. * ETextJustify::Type::Center 中
    45. * ETextJustify::Type::Right 右
    46. */
    47. void SetAppearance(UDataTable* TextStyleSet, const FSlateFontInfo& DefaultFont, const FSlateColor& DefaultColorAndOpacity, const FVector2D& DefaultShadowOffset, const FLinearColor& DefaultShadowColorAndOpacity, const FSlateColor& DefaultSelectedBackgroundColor, const FSlateColor& DefaultHighlightColor, const FSlateBrush& DefaultHighlightShape, const FSlateBrush& DefaultStrikeBrush, const FSlateBrush& DefaultUnderlineBrush, const ETextTransformPolicy& DefaultTransformPolicy, const ETextOverflowPolicy& DefaultOverflowPolicy, const float& MinDesiredWidth, const ETextTransformPolicy& TransformPolicy, const ETextJustify::Type& Justification) {
    48. this->Widget->SetTextStyleSet(TextStyleSet);
    49. FTextBlockStyle DefaultTextStyle;
    50. DefaultTextStyle.SetFont(DefaultFont);
    51. DefaultTextStyle.SetColorAndOpacity(DefaultColorAndOpacity);
    52. DefaultTextStyle.SetShadowOffset(DefaultShadowOffset);
    53. DefaultTextStyle.SetShadowColorAndOpacity(DefaultShadowColorAndOpacity);
    54. DefaultTextStyle.SetSelectedBackgroundColor(DefaultSelectedBackgroundColor);
    55. DefaultTextStyle.SetHighlightColor(DefaultHighlightColor);
    56. DefaultTextStyle.SetHighlightShape(DefaultHighlightShape);
    57. DefaultTextStyle.SetStrikeBrush(DefaultStrikeBrush);
    58. DefaultTextStyle.SetUnderlineBrush(DefaultUnderlineBrush);
    59. DefaultTextStyle.SetTransformPolicy(DefaultTransformPolicy);
    60. DefaultTextStyle.SetOverflowPolicy(DefaultOverflowPolicy);
    61. this->Widget->SetDefaultTextStyle(DefaultTextStyle);
    62. this->Widget->SetMinDesiredWidth(MinDesiredWidth);
    63. this->Widget->SetTextTransformPolicy(TransformPolicy);
    64. this->Widget->SetJustification(Justification);
    65. }
    66. /**
    67. * 换行
    68. * @param {AutoTextWrap} 自动包裹文本
    69. */
    70. void SetWrap(bool AutoTextWrap) {
    71. this->Widget->SetAutoWrapText(AutoTextWrap);
    72. }
    73. /**
    74. * 裁剪
    75. * @param {OverflowPolicy} 高级 - 溢出策略
    76. * ETextOverflowPolicy::Clip 剪切
    77. * ETextOverflowPolicy::Ellipsis 省略
    78. */
    79. void SetOverflow(const ETextOverflowPolicy& OverflowPolicy) {
    80. this->Widget->SetTextOverflowPolicy(OverflowPolicy);
    81. }
    82. };

    WidgetImage.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Image.h"
    4. #include "WidgetBase.hpp"
    5. class WidgetImage : public WidgetBase {
    6. public:
    7. WidgetImage(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetBase(WidgetBlueprint, WidgetName) {}
    8. ~WidgetImage() {}
    9. public:
    10. /**
    11. * 外观
    12. * @param {Brush} 笔刷
    13. * @param {ColorAndOpacity} 颜色和不透明度
    14. */
    15. void SetAppearance(const FSlateBrush& Brush, const FLinearColor& ColorAndOpacity) {
    16. this->Widget->SetBrush(Brush);
    17. this->Widget->SetColorAndOpacity(ColorAndOpacity);
    18. }
    19. };

    WidgetButton.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Button.h"
    4. #include "Components/ButtonSlot.h"
    5. #include "WidgetContent.hpp"
    6. class WidgetButton : public WidgetContent {
    7. public:
    8. WidgetButton(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetContent(WidgetBlueprint, WidgetName) {}
    9. ~WidgetButton() {}
    10. public:
    11. /**
    12. * 插槽(按键槽)
    13. * @param {ChildWidget} 插槽中的Widget。
    14. * @param {Padding} 填充 (左、 上、 右、 下)
    15. * @param {HorizontalAlignment} 水平对齐
    16. * EHorizontalAlignment::HAlign_Left 向左
    17. * EHorizontalAlignment::HAlign_Center 居中
    18. * EHorizontalAlignment::HAlign_Right 向右
    19. * EHorizontalAlignment::HAlign_Fill 水平填充
    20. * @param {VerticalAlignment} 垂直对齐
    21. * EVerticalAlignment::VAlign_Top 向上
    22. * EVerticalAlignment::VAlign_Center 居中
    23. * EVerticalAlignment::VAlign_Bottom 向下
    24. * EVerticalAlignment::VAlign_Fill 垂直填充
    25. */
    26. void SetSlot(UWidget* ChildWidget, const FMargin& Padding, const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment) {
    27. UButtonSlot* Slot = Cast(ChildWidget->Slot);
    28. Slot->SetPadding(Padding);
    29. Slot->SetHorizontalAlignment(HorizontalAlignment);
    30. Slot->SetVerticalAlignment(VerticalAlignment);
    31. }
    32. /**
    33. * 外观
    34. * @param {Style} 样式
    35. * @param {ColorAndOpacity} 颜色和不透明度
    36. * @param {BackgroundColor} 背景颜色
    37. */
    38. void SetAppearance(const FButtonStyle& Style, const FLinearColor& ColorAndOpacity, const FLinearColor& BackgroundColor) {
    39. this->Widget->SetStyle(Style);
    40. this->Widget->SetColorAndOpacity(ColorAndOpacity);
    41. this->Widget->SetBackgroundColor(BackgroundColor);
    42. }
    43. /**
    44. * 交互
    45. * @param {IsFocusable} 为可聚焦
    46. * @param {ClickMethod} 高级 - 点击方法
    47. * EButtonClickMethod::Type::DownAndUp 上和下
    48. * EButtonClickMethod::Type::MouseDown 鼠标下
    49. * EButtonClickMethod::Type::MouseUp 鼠标上
    50. * EButtonClickMethod::Type::PreciseClick 精准点击
    51. * @param {TouchMethod} 高级 - 触控方法
    52. * EButtonTouchMethod::Type::DownAndUp 上和下
    53. * EButtonTouchMethod::Type::Down 下
    54. * EButtonTouchMethod::Type::PreciseTap 精准点按
    55. * @param {PressMethod} 高级 - 按压方法
    56. * EButtonPressMethod::Type::DownAndUp 上和下
    57. * EButtonPressMethod::Type::ButtonPress 按键按压
    58. * EButtonPressMethod::Type::ButtonRelease 按键松开
    59. */
    60. void SetMethod(bool IsFocusable, const EButtonClickMethod::Type& ClickMethod, const EButtonTouchMethod::Type& TouchMethod, const EButtonPressMethod::Type& PressMethod) {
    61. this->Widget->IsFocusable = IsFocusable;
    62. this->Widget->SetClickMethod(ClickMethod);
    63. this->Widget->SetTouchMethod(TouchMethod);
    64. this->Widget->SetPressMethod(PressMethod);
    65. }
    66. };

    WidgetCheckBox.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/CheckBox.h"
    4. #include "WidgetContent.hpp"
    5. class WidgetCheckBox : public WidgetContent {
    6. public:
    7. WidgetCheckBox(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetContent(WidgetBlueprint, WidgetName) {}
    8. ~WidgetCheckBox() {}
    9. public:
    10. /**
    11. * 外观
    12. * @param {CheckedState} 已勾选状态
    13. * ECheckBoxState::Unchecked 未勾选
    14. * ECheckBoxState::Checked 已勾选
    15. * ECheckBoxState::Undetermined 未确定
    16. * @param {HorizontalAlignment} 水平对齐
    17. * EHorizontalAlignment::HAlign_Left 向左
    18. * EHorizontalAlignment::HAlign_Center 居中
    19. * EHorizontalAlignment::HAlign_Right 向右
    20. * EHorizontalAlignment::HAlign_Fill 水平填充
    21. */
    22. void SetAppearance(const ECheckBoxState& CheckedState, const EHorizontalAlignment& HorizontalAlignment) {
    23. this->Widget->SetCheckedState(CheckedState);
    24. this->Widget->HorizontalAlignment = TEnumAsByte(HorizontalAlignment);
    25. }
    26. /**
    27. * 样式
    28. * @param {WidgetStyle} 样式
    29. */
    30. void SetStyle(const FCheckBoxStyle& WidgetStyle) {
    31. this->Widget->WidgetStyle = WidgetStyle;
    32. }
    33. /**
    34. * 交互
    35. * @param {IsFocusable} 为可聚焦
    36. * @param {ClickMethod} 高级 - 点击方法
    37. * EButtonClickMethod::Type::DownAndUp 上和下
    38. * EButtonClickMethod::Type::MouseDown 鼠标下
    39. * EButtonClickMethod::Type::MouseUp 鼠标上
    40. * EButtonClickMethod::Type::PreciseClick 精准点击
    41. * @param {TouchMethod} 高级 - 触控方法
    42. * EButtonTouchMethod::Type::DownAndUp 上和下
    43. * EButtonTouchMethod::Type::Down 下
    44. * EButtonTouchMethod::Type::PreciseTap 精准点按
    45. * @param {PressMethod} 高级 - 按压方法
    46. * EButtonPressMethod::Type::DownAndUp 上和下
    47. * EButtonPressMethod::Type::ButtonPress 按键按压
    48. * EButtonPressMethod::Type::ButtonRelease 按键松开
    49. */
    50. void SetMethod(bool IsFocusable, const EButtonClickMethod::Type& ClickMethod, const EButtonTouchMethod::Type& TouchMethod, const EButtonPressMethod::Type& PressMethod) {
    51. this->Widget->IsFocusable = IsFocusable;
    52. this->Widget->SetClickMethod(ClickMethod);
    53. this->Widget->SetTouchMethod(TouchMethod);
    54. this->Widget->SetPressMethod(PressMethod);
    55. }
    56. };

    WidgetBorder.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Border.h"
    4. #include "Components/BorderSlot.h"
    5. #include "WidgetContent.hpp"
    6. class WidgetBorder : public WidgetContent {
    7. public:
    8. WidgetBorder(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetContent(WidgetBlueprint, WidgetName) {}
    9. ~WidgetBorder() {}
    10. public:
    11. /**
    12. * 插槽(边界插槽)
    13. * @param {ChildWidget} 插槽中的Widget。
    14. * @param {Padding} 填充 (左、 上、 右、 下)
    15. * @param {HorizontalAlignment} 水平对齐
    16. * EHorizontalAlignment::HAlign_Left 向左
    17. * EHorizontalAlignment::HAlign_Center 居中
    18. * EHorizontalAlignment::HAlign_Right 向右
    19. * EHorizontalAlignment::HAlign_Fill 水平填充
    20. * @param {VerticalAlignment} 垂直对齐
    21. * EVerticalAlignment::VAlign_Top 向上
    22. * EVerticalAlignment::VAlign_Center 居中
    23. * EVerticalAlignment::VAlign_Bottom 向下
    24. * EVerticalAlignment::VAlign_Fill 垂直填充
    25. */
    26. void SetSlot(UWidget* ChildWidget, const FMargin& Padding, const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment) {
    27. UBorderSlot* Slot = Cast(ChildWidget->Slot);
    28. Slot->SetPadding(Padding);
    29. Slot->SetHorizontalAlignment(HorizontalAlignment);
    30. Slot->SetVerticalAlignment(VerticalAlignment);
    31. }
    32. /**
    33. * 内容
    34. * @param {HorizontalAlignment} 水平对齐
    35. * EHorizontalAlignment::HAlign_Left 向左
    36. * EHorizontalAlignment::HAlign_Center 居中
    37. * EHorizontalAlignment::HAlign_Right 向右
    38. * EHorizontalAlignment::HAlign_Fill 水平填充
    39. * @param {VerticalAlignment} 垂直对齐
    40. * EVerticalAlignment::VAlign_Top 向上
    41. * EVerticalAlignment::VAlign_Center 居中
    42. * EVerticalAlignment::VAlign_Bottom 向下
    43. * EVerticalAlignment::VAlign_Fill 垂直填充
    44. * @param {ContentColorAndOpacity} 内容颜色和不透明度
    45. * @param {Padding} 填充(左、上、右、下)
    46. */
    47. void SetAppearanceContent(const EHorizontalAlignment& HorizontalAlignment, const EVerticalAlignment& VerticalAlignment, const FLinearColor& ContentColorAndOpacity, const FMargin& Padding) {
    48. this->Widget->SetHorizontalAlignment(HorizontalAlignment);
    49. this->Widget->SetVerticalAlignment(VerticalAlignment);
    50. this->Widget->SetContentColorAndOpacity(ContentColorAndOpacity);
    51. this->Widget->SetPadding(Padding);
    52. }
    53. /**
    54. * 外观
    55. * @param {Brush} 笔刷
    56. * @param {BrushColor} 笔刷颜色
    57. * @param {Scale} 所需大小缩放
    58. * @param {ShowEffectWhenDisabled} 高级 - 禁用时显示效果
    59. */
    60. void SetAppearance(const FSlateBrush& Brush, const FLinearColor& BrushColor, const FVector2D& Scale, bool ShowEffectWhenDisabled) {
    61. this->Widget->SetBrush(Brush);
    62. this->Widget->SetBrushColor(BrushColor);
    63. this->Widget->SetDesiredSizeScale(Scale);
    64. this->Widget->bShowEffectWhenDisabled = ShowEffectWhenDisabled;
    65. }
    66. };

    WidgetProgressBar.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/ProgressBar.h"
    4. #include "WidgetBase.hpp"
    5. class WidgetProgressBar : public WidgetBase {
    6. public:
    7. WidgetProgressBar(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetBase(WidgetBlueprint, WidgetName) {}
    8. ~WidgetProgressBar() {}
    9. public:
    10. /**
    11. * 样式
    12. * @param {BackgroundImage} 背景图
    13. * @param {FillImage} 填充图
    14. * @param {MarqueeImage} 边框图
    15. * @param {EnableFillAnimation} 启用填充动画
    16. */
    17. void SetStyle(const FSlateBrush& BackgroundImage, const FSlateBrush& FillImage, const FSlateBrush& MarqueeImage, bool EnableFillAnimation) {
    18. FProgressBarStyle ProgressBarStyle;
    19. ProgressBarStyle.SetBackgroundImage(BackgroundImage);
    20. ProgressBarStyle.SetFillImage(FillImage);
    21. ProgressBarStyle.SetMarqueeImage(MarqueeImage);
    22. ProgressBarStyle.SetEnableFillAnimation(EnableFillAnimation);
    23. this->Widget->WidgetStyle = ProgressBarStyle;
    24. }
    25. /**
    26. * 进度
    27. * @param {Percent} 百分比
    28. * @param {BarFillType} 条填充类型
    29. * EProgressBarFillType::Type::LeftToRight 左到右
    30. * EProgressBarFillType::Type::RightToLeft 右到左
    31. * EProgressBarFillType::Type::FillFromCenter 从中心填充
    32. * EProgressBarFillType::Type::FillFromCenterHorizontal 从中心水平填充
    33. * EProgressBarFillType::Type::FillFromCenterVertical 从中心垂直填充
    34. * EProgressBarFillType::Type::TopToBottom 顶到底
    35. * EProgressBarFillType::Type::BottomToTop 底到顶
    36. * @param {BarFillStyle} 条填充风格
    37. * EProgressBarFillStyle::Type::Mask 遮罩
    38. * EProgressBarFillStyle::Type::Scale 缩放
    39. * @param {IsMarquee} 为边框
    40. * @param {BorderPadding} 边缘填充
    41. */
    42. void SetProgress(const float& Percent, const EProgressBarFillType::Type& BarFillType, const EProgressBarFillStyle::Type& BarFillStyle, bool IsMarquee, const FVector2D& BorderPadding) {
    43. this->Widget->SetPercent(Percent);
    44. this->Widget->BarFillType = BarFillType;
    45. this->Widget->BarFillStyle = BarFillStyle;
    46. this->Widget->SetIsMarquee(IsMarquee);
    47. this->Widget->BorderPadding = BorderPadding;
    48. }
    49. /**
    50. * 外观
    51. * @param {Color} 填充颜色和不透明度
    52. */
    53. void SetAppearance(const FLinearColor& Color) {
    54. this->Widget->SetFillColorAndOpacity(Color);
    55. }
    56. };

    WidgetSlider.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/Slider.h"
    4. #include "WidgetBase.hpp"
    5. class WidgetSlider : public WidgetBase {
    6. public:
    7. WidgetSlider(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetBase(WidgetBlueprint, WidgetName) {}
    8. ~WidgetSlider() {}
    9. public:
    10. /**
    11. * 外观
    12. * @param {Value} 值
    13. * @param {MinValue} 最小值
    14. * @param {MaxValue} 最大值
    15. * @param {Orientation} 朝向
    16. * EOrientation::Orient_Horizontal 水平
    17. * EOrientation::Orient_Vertical 垂直
    18. * @param {SliderBarColor} 滑条颜色
    19. * @param {SliderHandleColor} 滑柄颜色
    20. * @param {StepSize} 步大小
    21. * @param {IsIndentHandle} 高级 - 缩进柄
    22. * @param {IsLocked} 高级 - 锁定
    23. * @param {MouseUsesStep} 高级 - 鼠标使用步
    24. * @param {RequiresControllerLock} 高级 - 需要控制器锁定
    25. */
    26. void SetAppearance(const float& Value, const float& MinValue, const float& MaxValue, const EOrientation& Orientation, const FLinearColor& SliderBarColor, const FLinearColor& SliderHandleColor, const float& StepSize, bool IsIndentHandle, bool IsLocked, bool MouseUsesStep, bool RequiresControllerLock) {
    27. this->Widget->SetValue(Value);
    28. this->Widget->SetMinValue(MinValue);
    29. this->Widget->SetMaxValue(MaxValue);
    30. this->Widget->Orientation = TEnumAsByte(Orientation);
    31. this->Widget->SetSliderBarColor(SliderBarColor);
    32. this->Widget->SetSliderHandleColor(SliderHandleColor);
    33. this->Widget->SetStepSize(StepSize);
    34. this->Widget->SetIndentHandle(IsIndentHandle);
    35. this->Widget->SetLocked(IsLocked);
    36. this->Widget->MouseUsesStep = MouseUsesStep;
    37. this->Widget->RequiresControllerLock = RequiresControllerLock;
    38. }
    39. /**
    40. * 样式
    41. * @param {NormalBarImage} 样式 - 普通的条图像
    42. * @param {HoveredBarImage} 样式 - 悬浮的条图像
    43. * @param {DisabledBarImage} 样式 - 禁用的条图像
    44. * @param {NormalThumbImage} 样式 - 普通的缩略图
    45. * @param {HoveredThumbImage} 样式 - 悬浮的缩略图
    46. * @param {DisabledThumbImage} 样式 - 禁用的缩略图
    47. * @param {BarThickness} 条厚度
    48. */
    49. void SetStyle(const FSlateBrush& NormalBarImage, const FSlateBrush& HoveredBarImage, const FSlateBrush& DisabledBarImage, const FSlateBrush& NormalThumbImage, const FSlateBrush& HoveredThumbImage, const FSlateBrush& DisabledThumbImage, const float& BarThickness) {
    50. FSliderStyle SliderStyle;
    51. SliderStyle.SetNormalBarImage(NormalBarImage);
    52. SliderStyle.SetHoveredBarImage(HoveredBarImage);
    53. SliderStyle.SetDisabledBarImage(DisabledBarImage);
    54. SliderStyle.SetNormalThumbImage(NormalThumbImage);
    55. SliderStyle.SetHoveredThumbImage(HoveredThumbImage);
    56. SliderStyle.SetDisabledThumbImage(DisabledThumbImage);
    57. SliderStyle.SetBarThickness(BarThickness);
    58. this->Widget->WidgetStyle = SliderStyle;
    59. }
    60. /**
    61. * 交互
    62. * @param {IsFocusable} 为可聚焦
    63. */
    64. void SetInteraction(bool IsFocusable) {
    65. this->Widget->IsFocusable = IsFocusable;
    66. }
    67. };

    3、输入类型组件

    WidgetEditableText.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/EditableText.h"
    4. #include "WidgetBase.hpp"
    5. class WidgetEditableText : public WidgetBase {
    6. public:
    7. WidgetEditableText(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetBase(WidgetBlueprint, WidgetName) {}
    8. ~WidgetEditableText() {}
    9. public:
    10. /**
    11. * 内容
    12. * @param {Text} 文本
    13. * @param {HintText} 提示文本
    14. */
    15. void SetContent(const FString& Text, const FString& HintText) {
    16. this->Widget->SetText(FText::FromString(Text));
    17. this->Widget->SetHintText(FText::FromString(HintText));
    18. }
    19. /**
    20. * 外观
    21. * @param {Font} 字体
    22. * @param {ColorAndOpacity} 颜色和不透明度
    23. * @param {BackgroundImageSelected} 已选择背景图像
    24. * @param {BackgroundImageComposing} 背景图像合成
    25. * @param {CaretImage} 插入符图像
    26. * @param {IsReadyOnly} 为只读
    27. * @param {IsPassword} 为密码
    28. * @param {MinimumDesiredWidth} 所需最小宽度
    29. * @param {Justification} 对齐
    30. * ETextJustify::Type::Left 将文本左对齐
    31. * ETextJustify::Type::Center 将文本中对齐
    32. * ETextJustify::Type::Right 将文本右对齐
    33. */
    34. void SetAppearance(const FSlateFontInfo& Font, const FSlateColor& ColorAndOpacity, const FSlateBrush& BackgroundImageSelected, const FSlateBrush& BackgroundImageComposing, const FSlateBrush& CaretImage, bool IsReadyOnly, bool IsPassword, const float MinimumDesiredWidth, const ETextJustify::Type& Justification) {
    35. FEditableTextStyle EditableTextStyle;
    36. EditableTextStyle.SetFont(Font);
    37. EditableTextStyle.SetColorAndOpacity(ColorAndOpacity);
    38. EditableTextStyle.SetBackgroundImageSelected(BackgroundImageSelected);
    39. EditableTextStyle.SetBackgroundImageComposing(BackgroundImageComposing);
    40. EditableTextStyle.SetCaretImage(CaretImage);
    41. this->Widget->WidgetStyle = EditableTextStyle;
    42. this->Widget->SetIsReadOnly(IsReadyOnly);
    43. this->Widget->SetIsPassword(IsPassword);
    44. this->Widget->MinimumDesiredWidth = MinimumDesiredWidth;
    45. this->Widget->SetJustification(Justification);
    46. }
    47. /**
    48. * 行为
    49. * @param {IsCaretMovedWhenGainFocus} 高级 - 获取聚焦时插入符移动
    50. * @param {SelectAllTextWhenFocused} 高级 - 聚焦时选择所有文本
    51. * @param {RevertTextOnEscape} 高级 - 退出时恢复文本
    52. * @param {ClearKeyboardFocusOnCommit} 高级 - 提交时清除键盘聚焦
    53. * @param {SelectAllTextOnCommit} 高级 - 提交时选择所有文本
    54. * @param {AllowContextMenu} 高级 - 允许快捷菜单
    55. * @param {KeyboardType} 高级 - 键盘类型
    56. * EVirtualKeyboardType::Type::Default 默认
    57. * EVirtualKeyboardType::Type::Number 数字
    58. * EVirtualKeyboardType::Type::Web 网络
    59. * EVirtualKeyboardType::Type::Email 电子邮件
    60. * EVirtualKeyboardType::Type::Password 密码
    61. * EVirtualKeyboardType::Type::AlphaNumeric 透明度数字
    62. * @param {EnableAutocorrect} 高级 - 虚拟键盘选项 - 启用自动修正
    63. * @param {VirtualKeyboardTrigger} 高级 - 虚拟键盘触发器
    64. * EVirtualKeyboardTrigger::OnFocusByPointer 在由指针的聚焦上
    65. * EVirtualKeyboardTrigger::OnAllFocusEvents 在所有聚焦事件上
    66. * @param {VirtualKeyboardDismissAction} 高级 - 虚拟键盘取消操作
    67. * EVirtualKeyboardDismissAction::TextChangeOnDismiss 取消时变更文本
    68. * EVirtualKeyboardDismissAction::TextCommitOnAccept 接受时提交文本
    69. * EVirtualKeyboardDismissAction::TextCommitOnDismiss 取消时提交文本
    70. */
    71. void SetBehavior(bool IsCaretMovedWhenGainFocus, bool SelectAllTextWhenFocused, bool RevertTextOnEscape, bool ClearKeyboardFocusOnCommit, bool SelectAllTextOnCommit, bool AllowContextMenu, const EVirtualKeyboardType::Type& KeyboardType, bool EnableAutocorrect, const EVirtualKeyboardTrigger& VirtualKeyboardTrigger, const EVirtualKeyboardDismissAction& VirtualKeyboardDismissAction) {
    72. this->Widget->IsCaretMovedWhenGainFocus = IsCaretMovedWhenGainFocus;
    73. this->Widget->SelectAllTextWhenFocused = SelectAllTextWhenFocused;
    74. this->Widget->RevertTextOnEscape = RevertTextOnEscape;
    75. this->Widget->ClearKeyboardFocusOnCommit = ClearKeyboardFocusOnCommit;
    76. this->Widget->SelectAllTextOnCommit = SelectAllTextOnCommit;
    77. this->Widget->AllowContextMenu = AllowContextMenu;
    78. this->Widget->SetKeyboardType(KeyboardType);
    79. FVirtualKeyboardOptions VirtualKeyboardOptions;
    80. VirtualKeyboardOptions.bEnableAutocorrect = EnableAutocorrect;
    81. this->Widget->VirtualKeyboardOptions = VirtualKeyboardOptions;
    82. this->Widget->VirtualKeyboardTrigger = VirtualKeyboardTrigger;
    83. this->Widget->VirtualKeyboardDismissAction = VirtualKeyboardDismissAction;
    84. }
    85. /**
    86. * 裁剪
    87. * @param {OverflowPolicy} 高级 - 溢出策略
    88. * ETextOverflowPolicy::Clip 剪切
    89. * ETextOverflowPolicy::Ellipsis 省略
    90. */
    91. void SetClipping(const ETextOverflowPolicy& OverflowPolicy) {
    92. this->Widget->SetTextOverflowPolicy(OverflowPolicy);
    93. }
    94. };

    WidgetEditableTextBox.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/EditableTextBox.h"
    4. #include "WidgetBase.hpp"
    5. class WidgetEditableTextBox : public WidgetBase {
    6. public:
    7. WidgetEditableTextBox(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetBase(WidgetBlueprint, WidgetName) {}
    8. ~WidgetEditableTextBox() {}
    9. public:
    10. /**
    11. * 内容
    12. * @param {Text} 文本
    13. * @param {HintText} 提示文本
    14. */
    15. void SetContent(const FString& Text, const FString& HintText) {
    16. this->Widget->SetText(FText::FromString(Text));
    17. this->Widget->SetHintText(FText::FromString(HintText));
    18. }
    19. /**
    20. * 外观
    21. * @param {BackgroundImageNormal} 普通背景图像
    22. * @param {BackgroundImageHovered} 已悬停背景图像
    23. * @param {BackgroundImageFocused} 已聚焦背景图像
    24. * @param {BackgroundImageReadOnly} 只读背景图像
    25. * @param {Padding} 填充
    26. * @param {Font} 文本风格
    27. * @param {ForegroundColor} 前景颜色
    28. * @param {BackgroundColor} 背景颜色
    29. * @param {ReadOnlyForegroundColor} 只读前景颜色
    30. * @param {FocusedForegroundColor} 聚焦前景颜色
    31. * @param {HScrollBarPadding} H滚动条填充
    32. * @param {VScrollBarPadding} V滚动条填充
    33. * @param {ScrollBarStyle} 滚动条样式
    34. * @param {IsReadyOnly} 为只读
    35. * @param {IsPassword} 为密码
    36. * @param {MinimumDesiredWidth} 所需最小宽度
    37. * @param {Justification} 对齐
    38. * ETextJustify::Type::Left 将文本左对齐
    39. * ETextJustify::Type::Center 将文本中对齐
    40. * ETextJustify::Type::Right 将文本右对齐
    41. */
    42. void SetAppearance(const FSlateBrush& BackgroundImageNormal, const FSlateBrush& BackgroundImageHovered, const FSlateBrush& BackgroundImageFocused, const FSlateBrush& BackgroundImageReadOnly, const FMargin& Padding, const FSlateFontInfo& Font, const FSlateColor& ForegroundColor, const FSlateColor& BackgroundColor, const FSlateColor& ReadOnlyForegroundColor, const FSlateColor& FocusedForegroundColor, const FMargin& HScrollBarPadding, const FMargin& VScrollBarPadding, const FScrollBarStyle& ScrollBarStyle, bool IsReadyOnly, bool IsPassword, const float MinimumDesiredWidth, const ETextJustify::Type& Justification) {
    43. FEditableTextBoxStyle EditableTextBoxStyle;
    44. EditableTextBoxStyle.SetBackgroundImageNormal(BackgroundImageNormal);
    45. EditableTextBoxStyle.SetBackgroundImageHovered(BackgroundImageHovered);
    46. EditableTextBoxStyle.SetBackgroundImageFocused(BackgroundImageFocused);
    47. EditableTextBoxStyle.SetBackgroundImageReadOnly(BackgroundImageReadOnly);
    48. EditableTextBoxStyle.SetPadding(Padding);
    49. EditableTextBoxStyle.SetFont(Font);
    50. EditableTextBoxStyle.SetForegroundColor(ForegroundColor);
    51. EditableTextBoxStyle.SetBackgroundColor(BackgroundColor);
    52. EditableTextBoxStyle.SetReadOnlyForegroundColor(ReadOnlyForegroundColor);
    53. EditableTextBoxStyle.SetFocusedForegroundColor(FocusedForegroundColor);
    54. EditableTextBoxStyle.SetHScrollBarPadding(HScrollBarPadding);
    55. EditableTextBoxStyle.SetVScrollBarPadding(VScrollBarPadding);
    56. EditableTextBoxStyle.SetScrollBarStyle(ScrollBarStyle);
    57. this->Widget->WidgetStyle = EditableTextBoxStyle;
    58. this->Widget->SetIsReadOnly(IsReadyOnly);
    59. this->Widget->SetIsPassword(IsPassword);
    60. this->Widget->MinimumDesiredWidth = MinimumDesiredWidth;
    61. this->Widget->SetJustification(Justification);
    62. }
    63. /**
    64. * 行为
    65. * @param {IsCaretMovedWhenGainFocus} 高级 - 获取聚焦时插入符移动
    66. * @param {SelectAllTextWhenFocused} 高级 - 聚焦时选择所有文本
    67. * @param {RevertTextOnEscape} 高级 - 退出时恢复文本
    68. * @param {ClearKeyboardFocusOnCommit} 高级 - 提交时清除键盘聚焦
    69. * @param {SelectAllTextOnCommit} 高级 - 提交时选择所有文本
    70. * @param {AllowContextMenu} 高级 - 允许快捷菜单
    71. * @param {KeyboardType} 高级 - 键盘类型
    72. * EVirtualKeyboardType::Type::Default 默认
    73. * EVirtualKeyboardType::Type::Number 数字
    74. * EVirtualKeyboardType::Type::Web 网络
    75. * EVirtualKeyboardType::Type::Email 电子邮件
    76. * EVirtualKeyboardType::Type::Password 密码
    77. * EVirtualKeyboardType::Type::AlphaNumeric 透明度数字
    78. * @param {EnableAutocorrect} 高级 - 虚拟键盘选项 - 启用自动修正
    79. * @param {VirtualKeyboardTrigger} 高级 - 虚拟键盘触发器
    80. * EVirtualKeyboardTrigger::OnFocusByPointer 在由指针的聚焦上
    81. * EVirtualKeyboardTrigger::OnAllFocusEvents 在所有聚焦事件上
    82. * @param {VirtualKeyboardDismissAction} 高级 - 虚拟键盘取消操作
    83. * EVirtualKeyboardDismissAction::TextChangeOnDismiss 取消时变更文本
    84. * EVirtualKeyboardDismissAction::TextCommitOnAccept 接受时提交文本
    85. * EVirtualKeyboardDismissAction::TextCommitOnDismiss 取消时提交文本
    86. */
    87. void SetBehavior(bool IsCaretMovedWhenGainFocus, bool SelectAllTextWhenFocused, bool RevertTextOnEscape, bool ClearKeyboardFocusOnCommit, bool SelectAllTextOnCommit, bool AllowContextMenu, const EVirtualKeyboardType::Type& KeyboardType, bool EnableAutocorrect, const EVirtualKeyboardTrigger& VirtualKeyboardTrigger, const EVirtualKeyboardDismissAction& VirtualKeyboardDismissAction) {
    88. this->Widget->IsCaretMovedWhenGainFocus = IsCaretMovedWhenGainFocus;
    89. this->Widget->SelectAllTextWhenFocused = SelectAllTextWhenFocused;
    90. this->Widget->RevertTextOnEscape = RevertTextOnEscape;
    91. this->Widget->ClearKeyboardFocusOnCommit = ClearKeyboardFocusOnCommit;
    92. this->Widget->SelectAllTextOnCommit = SelectAllTextOnCommit;
    93. this->Widget->AllowContextMenu = AllowContextMenu;
    94. this->Widget->KeyboardType = TEnumAsByte(KeyboardType);
    95. FVirtualKeyboardOptions VirtualKeyboardOptions;
    96. VirtualKeyboardOptions.bEnableAutocorrect = EnableAutocorrect;
    97. this->Widget->VirtualKeyboardOptions = VirtualKeyboardOptions;
    98. this->Widget->VirtualKeyboardTrigger = VirtualKeyboardTrigger;
    99. this->Widget->VirtualKeyboardDismissAction = VirtualKeyboardDismissAction;
    100. }
    101. /**
    102. * 裁剪
    103. * @param {OverflowPolicy} 高级 - 溢出策略
    104. * ETextOverflowPolicy::Clip 剪切
    105. * ETextOverflowPolicy::Ellipsis 省略
    106. */
    107. void SetClipping(const ETextOverflowPolicy& OverflowPolicy) {
    108. this->Widget->SetTextOverflowPolicy(OverflowPolicy);
    109. }
    110. };

    4、列表类型

    WidgetListView.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/ListView.h"
    4. #include "WidgetBase.hpp"
    5. template <typename WidgetT = UListView>
    6. class WidgetListView : public WidgetBase {
    7. public:
    8. WidgetListView(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetBase(WidgetBlueprint, WidgetName) {}
    9. ~WidgetListView() {}
    10. public:
    11. /**
    12. * 滚动中
    13. * @param {ScrollbarVisibility} 显示滚动条(* 运行时才有效)
    14. * ESlateVisibility::Visible (可视)
    15. * ESlateVisibility::Collapsed (已折叠)
    16. * ESlateVisibility::Hidden (隐藏)
    17. * ESlateVisibility::HitTestInvisible (非可命中测试(自身和所有子项))
    18. * ESlateVisibility::SelfHitTestInvisible (非可命中测试(仅自身))
    19. * @param {WheelScrollMultiplier} 滚轮滚动乘数
    20. * @param {ScrollOffset} 固定行滚动偏移(* 运行时才有效)
    21. */
    22. void SetScrolling(const ESlateVisibility& ScrollbarVisibility, const float& WheelScrollMultiplier, const float& ScrollOffset) {
    23. this->Widget->SetScrollbarVisibility(ScrollbarVisibility);
    24. this->Widget->SetWheelScrollMultiplier(WheelScrollMultiplier);
    25. this->Widget->SetScrollOffset(ScrollOffset);
    26. }
    27. /**
    28. * 列表视图
    29. * @param {SelectionMode} 选择模式
    30. * ESelectionMode::Type::None 无
    31. * ESelectionMode::Type::Single 单个
    32. * ESelectionMode::Type::SingleToggle 单个切换
    33. * ESelectionMode::Type::Multi 多个
    34. */
    35. void SetListView(const ESelectionMode::Type& SelectionMode) {
    36. this->Widget->SetSelectionMode(TEnumAsByte(SelectionMode));
    37. }
    38. /**
    39. * 列表记录
    40. * @param {EntryWidgetClass} 条目控件类
    41. */
    42. void SetEntryWidgetClass(const TSubclassOf& EntryWidgetClass) {
    43. const UClass* WidgetClass = this->Widget->GetClass();
    44. const FProperty* Property = WidgetClass->FindPropertyByName(FName(TEXT("EntryWidgetClass")));
    45. if (Property) {
    46. TSubclassOf* ValuePtr = Property->ContainerPtrToValuePtr>(this->Widget);
    47. Property->CopySingleValue(ValuePtr, &EntryWidgetClass);
    48. }
    49. }
    50. /**
    51. * 列表记录
    52. * @param {EntryWidgetBlueprint} 条目控件蓝图
    53. */
    54. void SetEntryWidgetClass(UWidgetBlueprint* EntryWidgetBlueprint) {
    55. const TSubclassOf EntryWidgetClass = EntryWidgetBlueprint->GeneratedClass;
    56. this->SetEntryWidgetClass(EntryWidgetClass);
    57. }
    58. };

    WidgetTileView.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/TileView.h"
    4. #include "WidgetListView.hpp"
    5. class WidgetTileView : public WidgetListView {
    6. public:
    7. WidgetTileView(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetListView(WidgetBlueprint, WidgetName) {}
    8. ~WidgetTileView() {}
    9. public:
    10. /**
    11. * 列表记录
    12. * @param {EntryHeight} 条目高度
    13. * @param {EntryWidth} 条目宽度
    14. */
    15. void SetListEntries(const float& EntryHeight, const float& EntryWidth) {
    16. this->Widget->SetEntryHeight(EntryHeight);
    17. this->Widget->SetEntryWidth(EntryWidth);
    18. }
    19. };

    5、优化

    WidgetRetainerBox.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Components/RetainerBox.h"
    4. #include "WidgetContent.hpp"
    5. class WidgetRetainerBox : public WidgetContent {
    6. public:
    7. WidgetRetainerBox(UWidgetBlueprint* WidgetBlueprint, FName& WidgetName) : WidgetContent(WidgetBlueprint, WidgetName) {}
    8. ~WidgetRetainerBox() {}
    9. public:
    10. /**
    11. * 渲染规则
    12. * @param {RetainRendering} 保留渲染。
    13. * @param {RenderOnInvalidation} 失效时渲染
    14. * @param {RenderOnPhase} 相位时渲染
    15. * @param {RenderPhase} 相位
    16. * @param {TotalPhases} 相位数
    17. */
    18. void SetRendering(bool RetainRendering, bool RenderOnInvalidation, bool RenderOnPhase, const int32& RenderPhase, const int32& TotalPhases) {
    19. this->Widget->SetRetainRendering(RetainRendering);
    20. this->Widget->RenderOnInvalidation = RenderOnInvalidation;
    21. this->Widget->RenderOnPhase = RenderOnPhase;
    22. this->Widget->SetRenderingPhase(RenderPhase, TotalPhases);
    23. }
    24. /**
    25. * 效果
    26. * @param {EffectMaterial} 效果材质。
    27. * @param {TextureParameter} 纹理参数
    28. */
    29. void SetEffect(UMaterialInterface* EffectMaterial, const FName& TextureParameter) {
    30. this->Widget->SetEffectMaterial(EffectMaterial);
    31. this->Widget->SetTextureParameter(TextureParameter);
    32. }
    33. /**
    34. * 效果
    35. * @param {EffectMaterialPath} 效果材质路径。
    36. * @param {TextureParameter} 纹理参数
    37. */
    38. void SetEffect(const FString& EffectMaterialPath, const FName& TextureParameter) {
    39. UMaterialInterface* EffectMaterial = Cast(StaticLoadObject(UMaterialInterface::StaticClass(), nullptr, *EffectMaterialPath));
    40. if (EffectMaterial) {
    41. this->SetEffect(EffectMaterial, TextureParameter);
    42. }
    43. }
    44. };

    6、用户创建

    WidgetUserWidget.hpp 文件

    1. #pragma once
    2. #include "WidgetBlueprint.h"
    3. #include "Blueprint/UserWidget.h"
    4. #include "WidgetBase.hpp"
    5. class WidgetUserWidget : public WidgetBase {
    6. public:
    7. UWidgetBlueprint* UserWidgetBlueprint;
    8. public:
    9. WidgetUserWidget(UWidgetBlueprint* WidgetBlueprint, UWidgetBlueprint* UserWidgetBlueprint, FName& WidgetName) : WidgetBase(WidgetBlueprint), UserWidgetBlueprint(UserWidgetBlueprint) {
    10. UClass* UserWidgetClass = UserWidgetBlueprint->GeneratedClass;
    11. if (UserWidgetClass && UserWidgetClass->IsChildOf(UUserWidget::StaticClass())) {
    12. this->Widget = WidgetBlueprint->WidgetTree->ConstructWidget(UserWidgetClass, WidgetName);
    13. }
    14. }
    15. ~WidgetUserWidget() {}
    16. public:
    17. // 外观 - 颜色和不透明度
    18. void SetColorAndOpacity(const FLinearColor& ColorAndOpacity) {
    19. this->Widget->SetColorAndOpacity(ColorAndOpacity);
    20. }
    21. // 外观 - 前景颜色
    22. void SetForegroundColor(const FSlateColor& ForegroundColor) {
    23. this->Widget->SetForegroundColor(ForegroundColor);
    24. }
    25. // 外观 - 填充
    26. void SetPadding(const FMargin& Padding) {
    27. this->Widget->SetPadding(Padding);
    28. }
    29. };

  • 相关阅读:
    vue3 和 vue2 区别,面试简答
    力扣-232.用栈实现队列
    C工程与寄存器封装
    单元测试:会变化的定义
    Paragon NTFS与Tuxera NTFS有何区别 Mac NTFS 磁盘读写工具选哪个好
    apple-app-site-association nginx
    anaconda:Env creation from python 3.7 not working M1 Apple Silicon Mac
    Linux_API_系列-整体概览
    协程简单上手(线程切换)
    2023年中国恒温蜡疗仪发展趋势分析:应用前景存有很大发展与探索空间[图]
  • 原文地址:https://blog.csdn.net/qq_42486920/article/details/127557994