이 페이지에서

QObjectBindableProperty Class

template <typename Class, typename T, auto Offset, auto Signal> class QObjectBindableProperty

QObjectBindableProperty 클래스는 ` QObject `에서 파생된 클래스에 저장된 속성 데이터에 대한 자동 속성 바인딩을 가능하게 하는 템플릿 클래스입니다. 더 보기...

헤더: #include <QObjectBindableProperty>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
다음부터: Qt 6.0부터
상속: QPropertyData

QObjectBindableProperty 비교

범주비교 가능한 유형
동등성QObjectBindableProperty
동등성T.

공개 함수

QObjectBindableProperty()
QObjectBindableProperty(Functor &&f)
QObjectBindableProperty(T &&initialValue)
QObjectBindableProperty(const T &initialValue)
QObjectBindableProperty(Class *owner, QPropertyBinding<T> &&binding)
QObjectBindableProperty(Class *owner, const QPropertyBinding<T> &binding)
~QObjectBindableProperty()
QPropertyNotifier addNotifier(Functor f)
QPropertyBinding<T> binding() const
bool hasBinding() const
void notify()
QPropertyChangeHandler<Functor> onValueChanged(Functor f)
QPropertyBinding<T> setBinding(const QPropertyBinding<T> &newBinding)
QPropertyBinding<T> setBinding(Functor f)
bool setBinding(const QUntypedPropertyBinding &newBinding)
void setValue(QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type newValue)
void setValue(QObjectBindableProperty<Class, T, Offset, Signal>::rvalue_ref newValue)
QPropertyChangeHandler<Functor> subscribe(Functor f)
QPropertyBinding<T> takeBinding()
QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type value() const

매크로

(since 6.0) Q_OBJECT_BINDABLE_PROPERTY(containingClass, type, name, signal)
(since 6.0) Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(containingClass, type, name, initialvalue, signal)

상세 설명

QObjectBindableProperty는 템플릿 클래스로, 템플릿 매개변수 Class 는 소유 클래스인 QObject 의 파생 클래스를 지정하고, T 는 속성 값의 유형을 지정하며, Offset 는 클래스 내 속성의 위치를 지정하고, Signal 는 선택적으로 속성 값이 변경될 때 발송할 알림 신호를 지정합니다.

`QObjectBindableProperty`는 `T`의 인스턴스를 포함하는 제네릭 컨테이너로, 대부분 ` QProperty`와 유사하게 동작합니다. 이는 Qt 바인더블 프로퍼티를 구현하는 클래스 중 하나입니다. ` QProperty`와 달리, 이 클래스는 관리 데이터 구조를 둘러싼 ` QObject` 내에 저장합니다. 추가 템플릿 매개변수는 둘러싼 클래스와 변경 핸들러 역할을 하는 해당 클래스의 멤버 함수를 식별하는 데 사용됩니다.

Q_PROPERTY 를 사용하는 코드에 바인딩 지원을 추가하려면 QObjectBindableProperty를 사용할 수 있습니다. getter 및 setter 메서드는 ‘Bindable Property Getters and Setters’에 설명된 규칙에 따라 신중하게 수정해야 합니다.

속성 변경 시 변경 신호를 호출하려면 QObjectBindableProperty를 사용하고 변경 신호를 콜백으로 전달하십시오.

다음은 간단한 예제입니다.

#include <QObject>
#include <QProperty>
#include <QDebug>

class Foo : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int myVal READ myVal WRITE setMyVal BINDABLE bindableMyVal)
public:
    int myVal() { return myValMember.value(); }
   void setMyVal(int newvalue) { myValMember = newvalue; }
    QBindable<int> bindableMyVal() { return &myValMember; }
signals:
    void myValChanged();

private:
    Q_OBJECT_BINDABLE_PROPERTY(Foo, int, myValMember, &Foo::myValChanged);
};

int main()
{
    bool debugout(true); // 디버그 로그 활성화
    Foo myfoo;
    QProperty<int> prop(42);
    QObject::connect(&myfoo, &Foo::myValChanged, [&]() {
        if (debugout)
            qDebug() << myfoo.myVal();
    });
    myfoo.bindableMyVal().setBinding([&]() { return prop.value(); }); // "42" 출력

    prop = 5; // "5" 출력
    debugout = false;
    prop = 6; // 아무것도 출력하지 않음
    debugout = true;
    prop = 7; // "7" 출력
}

#include "main.moc"

QObjectBindableProperty는 일반적으로 직접 사용되지 않으며, 대신 Q_OBJECT_BINDABLE_PROPERTY 매크로를 사용하여 인스턴스를 생성합니다.

클래스 선언에서 Q_OBJECT_BINDABLE_PROPERTY 매크로를 사용하여 속성을 바인딩 가능하도록 선언하십시오.

class MyClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int x READ x WRITE setX NOTIFY xChanged BINDABLE bindableX)
public:
    int x() const { return xProp; }
    void setX(int x) { xProp = x; }
    QBindable<int> bindableX() { return QBindable<int>(&xProp); }

signals:
    void xChanged();

private:
    // Declare the instance of the bindable property data.
    Q_OBJECT_BINDABLE_PROPERTY(MyClass, int, xProp, &MyClass::xChanged)
};

기본값이 아닌 특정 값으로 속성을 직접 초기화해야 하는 경우, ` Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS ` 매크로를 사용할 수 있습니다. 이 매크로는 초기화 값을 매개변수 중 하나로 받아들입니다.

class MyClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int x READ x WRITE setX NOTIFY xChanged BINDABLE bindableX)
public:
    int x() const { return xProp; }
    void setX(int x) { xProp = x; }
    QBindable<int> bindableX() { return QBindable<int>(&xProp); }

signals:
    void xChanged();

private:
    // Declare the instance of int bindable property data and
    // initialize it with the value 5.
    // This is similar to declaring
    // int xProp = 5;
    // without using the new QObjectBindableProperty class.
    Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(MyClass, int, xProp, 5, &MyClass::xChanged)
};

Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS 는 여러 인수를 직접 지원하지 않습니다. 속성의 초기화에 여러 인수가 필요한 경우, 해당 생성자를 명시적으로 호출해 주십시오.

class CustomType
{
public:
    CustomType(int val, int otherVal) : value(val), anotherValue(otherVal) { }

private:
    int value = 0;
    int anotherValue = 0;
};

// later when using CustomType as a property
Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SomeClass, CustomType, xProp, CustomType(5, 10),
                                    &MyClass::xChanged)

변경 핸들러는 선택적으로 속성과 동일한 유형의 인수를 하나 받을 수 있으며, 이 경우 속성의 새 값이 해당 인수로 전달됩니다. 그렇지 않은 경우, 인수를 받지 않아야 합니다.

속성에 변경 알림이 필요하지 않은 경우, ` Q_PROPERTY ` 매크로에서 "NOTIFY xChanged"를 생략할 수 있으며, ` Q_OBJECT_BINDABLE_PROPERTY ` 및 ` Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS ` 매크로의 마지막 인자도 생략할 수 있습니다.

Q_OBJECT_BINDABLE_PROPERTY, Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS, QProperty, QObjectComputedProperty, Qt의 속성 시스템(Property System), Qt 바인딩 가능한 속성(Bindable Properties)항목도 참조하십시오 .

멤버 함수 문서

[default] QObjectBindableProperty::QObjectBindableProperty()

T의 기본 생성된 인스턴스를 가진 속성을 생성합니다.

[explicit] template <typename Functor> QObjectBindableProperty::QObjectBindableProperty(Functor &&f)

지정된 바인딩 표현식 f 에 연결된 속성을 생성합니다. 이 속성의 값은 새로운 바인딩을 평가한 결과로 설정됩니다. 바인딩의 종속성이 변경될 때마다 바인딩이 다시 평가되며, 이에 따라 속성의 값이 업데이트됩니다.

[explicit] QObjectBindableProperty::QObjectBindableProperty(T &&initialValue)

Move-Constructs: 지정된 initialValue 를 사용하여 속성을 생성합니다.

[explicit] QObjectBindableProperty::QObjectBindableProperty(const T &initialValue)

지정된 ` initialValue`을 사용하여 속성을 생성합니다.

[implicit] QObjectBindableProperty::QObjectBindableProperty(Class *owner, QPropertyBinding<T> &&binding)

지정된 ` binding ` 표현식과 연결된 속성을 생성합니다. 속성의 값은 새로운 바인딩을 평가한 결과로 설정됩니다. 바인딩의 종속성이 변경될 때마다 바인딩이 재평가되며, 이에 따라 속성의 값이 업데이트됩니다.

속성 값이 변경되면 콜백 함수를 통해 ` owner `에 알림이 전송됩니다.

[implicit] QObjectBindableProperty::QObjectBindableProperty(Class *owner, const QPropertyBinding<T> &binding)

지정된 ` binding ` 표현식과 연동되는 속성을 생성합니다. 속성의 값은 새로운 바인딩을 평가한 결과로 설정됩니다. 바인딩의 종속성이 변경될 때마다 바인딩이 재평가되며, 이에 따라 속성의 값이 업데이트됩니다.

속성 값이 변경되면 콜백 함수를 통해 ` owner `에 알림이 전송됩니다.

[implicit] QObjectBindableProperty::~QObjectBindableProperty()

해당 속성을 삭제합니다.

template <typename Functor> QPropertyNotifier QObjectBindableProperty::addNotifier(Functor f)

지정된 펑터 f 를 속성 값이 변경될 때마다 호출되는 콜백으로 등록합니다.

f 콜백은 매개변수가 없는 일반 호출 연산자 () 를 갖는 유형이어야 합니다. 즉, C++ 람다 표현식, std::function 또는 호출 연산자가 있는 사용자 정의 구조체도 제공할 수 있습니다.

반환된 속성 변경 핸들러 객체는 구독 상태를 추적합니다. 이 객체가 범위 밖으로 나가면 콜백의 구독이 해제됩니다.

이 메서드는 반환되는 객체가 템플릿이 아니기 때문에, 경우에 따라 onValueChanged()보다 사용하기 더 쉽습니다. 따라서 클래스의 멤버 등으로 더 쉽게 저장할 수 있습니다.

onValueChanged() 및 subscribe()도 참조하십시오 .

QPropertyBinding<T> QObjectBindableProperty::binding() const

이 속성과 연관된 바인딩 표현식을 반환합니다. 해당 연관 관계가 없는 경우, 기본 생성된 QPropertyBinding<T>가 반환됩니다.

setBinding()도 참조하십시오 .

bool QObjectBindableProperty::hasBinding() const

해당 속성이 바인딩과 연결되어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

void QObjectBindableProperty::notify()

프로그래밍 방식으로 속성의 변경 사항을 알립니다. 해당 속성에 의존하는 모든 바인딩에 알림이 전송되며, 속성에 신호가 정의되어 있는 경우 해당 신호가 발송됩니다.

이는 setValueBypassingBindings와 함께 사용하여, 클래스 불변 조건이 복원될 때까지 변경 신호 발송을 연기하는 데 유용할 수 있습니다.

참고: 이 속성에 바인딩이 있는경우 (즉, ` hasBinding()`가 true를 반환하는 경우), `notify()`가 호출되어도 해당 바인딩은 재평가되지 않습니다. 이 속성에 의존하는 다른 바인딩들은 평소와 같이 재평가됩니다.

Qt::beginPropertyUpdateGroup() 및 setValueBypassingBindings()도 참조하십시오 .

template <typename Functor> QPropertyChangeHandler<Functor> QObjectBindableProperty::onValueChanged(Functor f)

주어진 펑터 f 를 속성의 값이 변경될 때마다 호출될 콜백으로 등록합니다. 값이 변경될 때마다 컨텍스트에 따라 핸들러가 즉시 호출되거나 호출이 지연됩니다.

콜백 f 는 매개변수가 없는 일반 호출 연산자 () 를 갖는 유형이어야 합니다. 즉, C++ 람다 표현식, std::function 또는 호출 연산자가 있는 사용자 정의 구조체도 제공할 수 있습니다.

반환된 속성 변경 핸들러 객체는 등록 상태를 추적합니다. 이 객체가 범위 밖으로 나가면 콜백이 등록 해제됩니다.

QPropertyBinding<T> QObjectBindableProperty::setBinding(const QPropertyBinding<T> &newBinding)

이 속성의 값을 제공된 ` newBinding ` 표현식과 연결하고, 이전에 연결된 바인딩을 반환합니다. 속성의 값은 새로운 바인딩을 평가한 결과로 설정됩니다. 바인딩의 종속성이 변경될 때마다 바인딩이 재평가되며, 이에 따라 속성의 값이 업데이트됩니다. 속성 값이 변경되면 콜백 함수를 통해 소유자에게 알림이 전송됩니다.

binding()도 참조하십시오 .

template <typename Functor> QPropertyBinding<T> QObjectBindableProperty::setBinding(Functor f)

이 속성의 값을 제공된 펑터 f 와 연관시키고, 이전에 연관되었던 바인딩을 반환합니다. 속성의 값은 f 의 호출 연산자 () 를 호출하여 새로운 바인딩을 평가한 결과로 설정됩니다. 바인딩의 종속성이 변경될 때마다 바인딩이 재평가되며, 속성의 값은 그에 따라 업데이트됩니다.

속성 값이 변경되면 콜백 함수를 통해 소유자에게 알림이 전송됩니다.

이 함수는 오버로드된 함수입니다.

‘속성 바인딩 구성’항목도 참조하십시오 .

bool QObjectBindableProperty::setBinding(const QUntypedPropertyBinding &newBinding)

이 속성의 값을 제공된 newBinding 표현식과 연결합니다. 속성의 값은 새로운 바인딩을 평가한 결과로 설정됩니다. 바인딩의 종속성이 변경될 때마다 바인딩이 재평가되며, 이에 따라 속성의 값이 업데이트됩니다.

이 속성의 유형이 바인딩 함수가 반환하는 유형과 동일한 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false `를 반환합니다.

이 함수는 오버로드된 함수입니다.

void QObjectBindableProperty::setValue(QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type newValue)

void QObjectBindableProperty::setValue(QObjectBindableProperty<Class, T, Offset, Signal>::rvalue_ref newValue)

이 속성에 ` newValue `를 할당하고, 해당 속성에 바인딩이 설정되어 있는 경우 이를 제거합니다. 이로 인해 속성 값이 변경되면 owner 의 `Callback` 함수를 호출합니다.

template <typename Functor> QPropertyChangeHandler<Functor> QObjectBindableProperty::subscribe(Functor f)

주어진 펑터 f 를 콜백으로 등록하여, 해당 속성의 값이 변경될 때마다 즉시 또는 추후에 호출되도록 합니다. 값이 변경될 때마다 컨텍스트에 따라 핸들러가 즉시 호출되거나 지연되어 호출됩니다.

콜백 ` f `은 매개변수가 없는 일반 호출 연산자 ` () `를 갖는 유형이어야 합니다. 즉, C++ 람다 표현식, `std::function` 또는 호출 연산자가 있는 사용자 정의 구조체도 제공할 수 있습니다.

반환된 속성 변경 핸들러 객체는 구독 상태를 추적합니다. 이 객체가 스코프를 벗어나면 콜백의 구독이 해제됩니다.

QPropertyBinding<T> QObjectBindableProperty::takeBinding()

이 속성에서 바인딩 표현식을 분리하고 해당 표현식을 반환합니다. 이 함수를 호출한 후에는, 속성의 값은 새로운 값을 할당하거나 새로운 바인딩이 설정될 때만 변경됩니다.

QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type QObjectBindableProperty::value() const

속성의 값을 반환합니다. 이 함수는 값을 반환하기 전에, 해당 속성에 연결된 바인딩 표현식을 평가할 수 있습니다.

setValue()도 참조하십시오 .

매크로 문서

[since 6.0] Q_OBJECT_BINDABLE_PROPERTY(containingClass, type, name, signal)

containingClass 내부에서 type 타입의 QObjectBindableProperty 를 name 라는 이름으로 선언합니다. 선택적 인수 signal 가 지정된 경우, 속성이 변경됨(dirty)으로 표시될 때 이 신호가 발송됩니다.

이 매크로는 Qt 6.0에서 도입되었습니다.

Qt의 속성 시스템 (Property System ) 및 Qt 바인더블 속성(Bindable Properties)도 참조하십시오 .

[since 6.0] Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(containingClass, type, name, initialvalue, signal)

containingClass 내부에 type 타입의 QObjectBindableProperty 를 name 라는 이름으로 선언하며, 이 변수는 initialvalue 로 초기화됩니다. 선택적 인자 signal 가 주어지면, 속성이 변경된 것으로 표시될 때 이 신호가 발생합니다.

이 매크로는 Qt 6.0에서 도입되었습니다.

Qt의 속성 시스템 및 Qt 바인딩 가능한 속성도참조하십시오 .

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.