QObjectBindableProperty Class
template <typename Class, typename T, auto Offset, auto Signal = nullptr> class QObjectBindablePropertyQObjectBindableProperty 클래스는 QObject 파생 클래스에 저장된 속성 데이터에 대한 자동 속성 바인딩을 가능하게 하는 템플릿 클래스입니다. 더 보기...
Header: | #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(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는 T의 인스턴스를 보관하는 일반 컨테이너로, 대부분 QProperty 와 같은 동작을 합니다. Qt 바인더블 프로퍼티를 구현하는 클래스 중 하나입니다. QProperty 와는 달리 관리 데이터 구조를 주변 QObject 에 저장합니다. 추가 템플릿 파라미터는 주변 클래스와 변경 핸들러 역할을 하는 해당 클래스의 멤버 함수를 식별하는 데 사용됩니다.
QObjectBindableProperty를 사용하여 Q_PROPERTY 을 사용하는 코드에 바인딩 지원을 추가할 수 있습니다. 게터 및 세터 메서드는 바인딩 가능한 속성 게터 및 세터에 설명된 규칙에 따라 신중하게 조정해야 합니다.
속성 변경 시 변경 신호를 호출하려면 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(); }); // prints "42"prop = 5; // prints "5"debugout = false; prop = 6; // prints nothingdebugout = true; prop = 7; // prints "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(MyClass, 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의 프로퍼티 시스템 및 Qt 바인딩 가능한 프로퍼티를참조하십시오 .
멤버 함수 문서
void QObjectBindableProperty::setValue(QObjectBindableProperty<Class, T, Offset, Signal>::parameter_type newValue)
void QObjectBindableProperty::setValue(QObjectBindableProperty<Class, T, Offset, Signal>::rvalue_ref newValue)
이 프로퍼티에 newValue 을 할당하고 프로퍼티의 연결된 바인딩이 있는 경우 제거합니다. 결과적으로 속성 값이 변경되면 owner 에서 콜백 함수를 호출합니다.
QObjectBindableProperty::QObjectBindableProperty()
기본적으로 구성된 T의 인스턴스로 프로퍼티를 생성합니다.
[explicit]
template <typename Functor> QObjectBindableProperty::QObjectBindableProperty(Functor &&f)
제공된 바인딩 표현식 f 에 연결된 프로퍼티를 생성합니다. 프로퍼티의 값은 새 바인딩을 평가한 결과로 설정됩니다. 바인딩의 종속성이 변경될 때마다 바인딩이 다시 평가되고 그에 따라 프로퍼티의 값이 업데이트됩니다.
[explicit]
QObjectBindableProperty::QObjectBindableProperty(T &&initialValue)
이동 - 제공된 initialValue 을 사용하여 프로퍼티를 생성합니다.
[explicit]
QObjectBindableProperty::QObjectBindableProperty(const T &initialValue)
제공된 initialValue 을 사용하여 프로퍼티를 생성합니다.
[default]
QObjectBindableProperty::QObjectBindableProperty(Class *owner, QPropertyBinding<T> &&binding)
제공된 binding 표현식에 연결된 속성을 생성합니다. 프로퍼티 값은 새 바인딩을 평가한 결과로 설정됩니다. 바인딩의 종속성이 변경될 때마다 바인딩이 다시 평가되고 그에 따라 속성 값이 업데이트됩니다.
속성 값이 변경되면 콜백 함수를 통해 owner 에 알림이 전송됩니다.
[default]
QObjectBindableProperty::QObjectBindableProperty(Class *owner, const QPropertyBinding<T> &binding)
제공된 binding 표현식에 연결된 속성을 생성합니다. 프로퍼티 값은 새 바인딩을 평가한 결과로 설정됩니다. 바인딩의 종속성이 변경될 때마다 바인딩이 다시 평가되고 그에 따라 속성 값이 업데이트됩니다.
속성 값이 변경되면 콜백 함수를 통해 owner 에 알림이 전송됩니다.
[default]
QObjectBindableProperty::~QObjectBindableProperty()
속성을 파괴합니다.
template <typename Functor> QPropertyNotifier QObjectBindableProperty::addNotifier(Functor f)
주어진 함수 f 를 프로퍼티 값이 변경될 때마다 호출되는 콜백으로 구독합니다.
콜백 f 은 매개변수 없이 일반 호출 연산자 ()
가 있는 유형으로 예상됩니다. 즉, 호출 연산자가 있는 C++ 람다 표현식, std::함수 또는 사용자 정의 구조체를 제공할 수 있습니다.
반환된 속성 변경 핸들러 객체는 구독을 추적합니다. 범위를 벗어나면 콜백이 구독 취소됩니다.
이 메서드는 반환되는 객체가 템플릿이 아니므로 onValueChanged()보다 사용하기 쉬운 경우도 있습니다. 따라서 클래스의 멤버 등으로 더 쉽게 저장할 수 있습니다.
onValueChanged() 및 subscribe()도 참조하세요 .
QPropertyBinding<T> QObjectBindableProperty::binding() const
이 프로퍼티와 연관된 바인딩 표현식을 반환합니다. 이러한 연결이 존재하지 않으면 기본으로 구성된 QPropertyBinding<T>가 반환됩니다.
setBinding()도 참조하십시오 .
bool QObjectBindableProperty::hasBinding() const
프로퍼티가 바인딩과 연결된 경우 참을 반환하고 그렇지 않으면 거짓을 반환합니다.
void QObjectBindableProperty::notify()
프로퍼티의 변경을 프로그래밍 방식으로 알립니다. 프로퍼티에 의존하는 모든 바인딩에 알림이 전송되며, 프로퍼티에 신호가 있는 경우 신호가 방출됩니다.
클래스 불변성이 복원될 때까지 변경 시그널을 연기하기 위해 setValueBypassingBindings와 함께 사용하면 유용할 수 있습니다.
참고: 이 프로퍼티에 바인딩이 있는 경우(예: hasBinding()가 참을 반환하는 경우) notify()가 호출될 때 해당 바인딩은 다시 평가되지 않습니다. 이 속성에 따른 모든 바인딩은 여전히 평소와 같이 재평가됩니다.
Qt::beginPropertyUpdateGroup() 및 setValueBypassingBindings()도 참조하세요 .
template <typename Functor> QPropertyChangeHandler<Functor> QObjectBindableProperty::onValueChanged(Functor f)
프로퍼티 값이 변경될 때마다 호출될 콜백으로 지정된 함수 f 를 등록합니다. 값이 변경될 때마다 컨텍스트에 따라 핸들러가 즉시 호출되거나 지연됩니다.
콜백 f 은 매개변수 없이 일반 호출 연산자 ()
가 있는 유형으로 예상됩니다. 즉, 호출 연산자가 있는 C++ 람다 표현식, std::함수 또는 사용자 정의 구조체를 제공할 수 있습니다.
반환된 속성 변경 핸들러 객체는 등록을 추적합니다. 범위를 벗어나면 콜백은 등록이 취소됩니다.
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
을 반환합니다.
template <typename Functor> QPropertyChangeHandler<Functor> QObjectBindableProperty::subscribe(Functor f)
주어진 함수 f 를 즉시 호출되는 콜백으로 구독하고 향후 속성 값이 변경될 때마다 호출합니다. 값이 변경될 때마다 컨텍스트에 따라 핸들러가 즉시 호출되거나 지연됩니다.
콜백 f 은 매개 변수 없이 일반 호출 연산자 ()
가 있는 유형으로 예상됩니다. 즉, 호출 연산자가 있는 C++ 람다 표현식, std::함수 또는 사용자 정의 구조체를 제공할 수 있습니다.
반환된 속성 변경 핸들러 객체는 구독을 추적합니다. 범위를 벗어나면 콜백이 구독 취소됩니다.
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)
이름 name 을 가진 type 유형의 containingClass 안에 QObjectBindableProperty 을 선언합니다. 선택적 인수 signal 가 주어지면 프로퍼티가 더티로 표시될 때 이 신호가 발생합니다.
이 매크로는 Qt 6.0에 도입되었습니다.
Qt의 프로퍼티 시스템과 Qt 바인더블 프로퍼티도참조하십시오 .
[since 6.0]
Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(containingClass, type, name, initialvalue, signal)
initialvalue 로 초기화된 이름 name 을 가진 type 타입의 containingClass 안에 QObjectBindableProperty 을 선언합니다. 선택적 인수 signal 가 주어지면 프로퍼티가 더티로 표시될 때 이 신호가 발생하게 됩니다.
이 매크로는 Qt 6.0에 도입되었습니다.
Qt의 프로퍼티 시스템과 Qt 바인더블 프로퍼티도참조하십시오 .
© 2025 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.