学习UE4的时候,发现UMG居然没有CheckBoxGroup,CheckBox分组需要自己管理。相比于Unity3D来说,UE4在UI方面确实欠缺很多。无奈之下只好自己实现一个。
实现效果如下:
编辑界面如下:
代码实现如下:
CheckBoxGroup.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Components/NamedSlot.h"
#include "Components/CanvasPanel.h"
#include "Components/CheckBox.h"
#include "CheckBoxGroup.generated.h"
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnCheckBoxGroupStateChangedEvent, const TArray<UCheckBox*>&, childChangedArray);
UCLASS()
class UCheckBoxGroup : public UNamedSlot
{
GENERATED_BODY()
public:
UCheckBoxGroup();
protected:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "CheckBox Group")
bool _allowSwitchOff;
UPROPERTY(BlueprintAssignable, Category = "CheckBox Group")
FOnCheckBoxGroupStateChangedEvent _onStateChangedEvent;
UPanelWidget* _groupRoot;
FScriptDelegate _onStateChangedScriptDelegate;
UCheckBox* _lastCheckedChild;
protected:
virtual void OnWidgetRebuilt() override;
bool InitGroup();
bool InitChild(UCheckBox* child);
UFUNCTION(Category = "CheckBox Group")
void OnStateChanged(bool bIsChecked);
public:
UFUNCTION(BlueprintCallable, Category = "CheckBox Group")
TArray<UCheckBox*> CheckChildsState();
/*
UFUNCTION(Blueprint