当前位置:   article > 正文

UE5插件创建控件蓝图_ue5 createwidget

ue5 createwidget

一、创建插件

        选择 编辑器工具栏按钮,插件名为 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<UWidgetBlueprint>(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<UWidgetBlueprintFactory>();
  49. WidgetFactory->AddToRoot();
  50. UPackage* WidgetPackage = CreatePackage(*WBPPackage);
  51. WidgetBlueprint = Cast<UWidgetBlueprint>(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<UBlueprintEditorSettings>()->bShowDetailedCompileResults;
  69. LogResults.EventDisplayThresholdMs = GetDefault<UBlueprintEditorSettings>()->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<UPackage*> 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<T>(StaticLoadObject(T::StaticClass(), nullptr, *Path));
  14. T* Object = LoadObject<T>(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<USoundWave>(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>(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<UClass>(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<WidgetT> {
  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<WidgetT> {
  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<UCanvasPanel> {
  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<UCanvasPanelSlot>(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<UOverlay> {
  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<UOverlaySlot>(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<UHorizontalBox> {
  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<UHorizontalBoxSlot>(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<UVerticalBox> {
  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<UVerticalBoxSlot>(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<UUniformGridPanel> {
  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<UUniformGridSlot>(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<UScrollBox> {
  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<UScrollBoxSlot>(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<USizeBox> {
  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<USizeBoxSlot>(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<UWidgetSwitcher> {
  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<UWidgetSwitcherSlot>(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<UScaleBox> {
  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<UScaleBoxSlot>(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<USafeZone> {
  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<USafeZoneSlot>(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<UTextBlock> {
  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<URichTextBlock> {
  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<UImage> {
  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<UButton> {
  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<UButtonSlot>(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<UCheckBox> {
  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<EHorizontalAlignment>(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<UBorder> {
  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<UBorderSlot>(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<UProgressBar> {
  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<USlider> {
  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<EOrientation>(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<UEditableText> {
  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<UEditableTextBox> {
  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<EVirtualKeyboardType::Type>(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<WidgetT> {
  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<ESelectionMode::Type>(SelectionMode));
  37. }
  38. /**
  39. * 列表记录
  40. * @param {EntryWidgetClass} 条目控件类
  41. */
  42. void SetEntryWidgetClass(const TSubclassOf<UUserWidget>& EntryWidgetClass) {
  43. const UClass* WidgetClass = this->Widget->GetClass();
  44. const FProperty* Property = WidgetClass->FindPropertyByName(FName(TEXT("EntryWidgetClass")));
  45. if (Property) {
  46. TSubclassOf<UUserWidget>* ValuePtr = Property->ContainerPtrToValuePtr<TSubclassOf<UUserWidget>>(this->Widget);
  47. Property->CopySingleValue(ValuePtr, &EntryWidgetClass);
  48. }
  49. }
  50. /**
  51. * 列表记录
  52. * @param {EntryWidgetBlueprint} 条目控件蓝图
  53. */
  54. void SetEntryWidgetClass(UWidgetBlueprint* EntryWidgetBlueprint) {
  55. const TSubclassOf<UUserWidget> 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<UTileView> {
  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<URetainerBox> {
  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<UMaterialInterface>(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<UUserWidget> {
  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<UUserWidget>(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. };

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/107114?site
推荐阅读
相关标签
  

闽ICP备14008679号