Класс QObjectBindableProperty
шаблон <typename Class, typename T, auto Offset, auto Signal> класс QObjectBindablePropertyКласс QObjectBindableProperty — это шаблонный класс, который позволяет автоматически связывать свойства для данных свойств, хранящихся в классах, производных от QObject. Подробнее...
| Заголовок: | #include <QObjectBindableProperty> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| С момента: | Qt 6.0 |
| Наследует: | QPropertyData |
Открытые функции
| QObjectBindableProperty(Class *owner, QPropertyBinding<T> &&binding) | |
| QObjectBindableProperty(Class *owner, const QPropertyBinding<T> &binding) | |
| QObjectBindableProperty(Functor &&f) | |
| QObjectBindableProperty(T &&initialValue) | |
| QObjectBindableProperty(const T &initialValue) | |
| QObjectBindableProperty() | |
| ~QObjectBindableProperty() | |
| QPropertyBinding<T> | binding() const |
| bool | hasBinding() const |
| QPropertyChangeHandler<Functor> | onValueChanged(Functor f) |
| QPropertyBinding<T> | setBinding(const QPropertyBinding<T> &newBinding) |
| bool | setBinding(const QUntypedPropertyBinding &newBinding) |
| QPropertyBinding<T> | setBinding(Functor f) |
| void | setValue(QObjectBindableProperty::parameter_type newValue) |
| void | setValue(QObjectBindableProperty::rvalue_ref newValue) |
| QPropertyChangeHandler<Functor> | subscribe(Functor f) |
| QPropertyBinding<T> | takeBinding() |
| QObjectBindableProperty::parameter_type | value() const |
Макросы
| Q_OBJECT_BINDABLE_PROPERTY(containingClass, type, name, signal) | |
| Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(containingClass, type, name, initialvalue, signal) |
Подробное описание
QObjectBindableProperty — это обобщенный контейнер, который содержит экземпляр T и ведет себя в основном как QProperty. Это один из классов, реализующих Qt Связанные свойства. Дополнительные шаблонные параметры используются для идентификации окружающего класса и члена функции этого класса. Член функции будет вызываться всякий раз, когда изменяется значение, хранящееся в свойстве.
Вы можете использовать QObjectBindableProperty для добавления поддержки связывания в код, использующий Q_PROPERTY. Методы получения и установки легко адаптировать для доступа к QObjectBindableProperty, а не к простому значению. Для вызова сигнала изменения при изменении свойства используйте QObjectBindableProperty и передайте сигнал изменения в качестве обратного вызова.
Класс 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) Если свойству не нужно уведомление об изменении, вы можете опустить "NOFITY xChanged" в макросе Q_PROPERTY, а также последний аргумент макросов Q_OBJECT_BINDABLE_PROPERTY и Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS.
Документация по членам-функциям
void QObjectBindableProperty::setValue(QObjectBindableProperty::parameter_type newValue)
void QObjectBindableProperty::setValue(QObjectBindableProperty::rvalue_ref newValue)
Присваивает newValue этому свойству и удаляет связанное с свойством связывание, если оно существует. Если значение свойства изменяется в результате, вызывает функцию обратного вызова на owner.
[default] QObjectBindableProperty::QObjectBindableProperty(Class *owner, QPropertyBinding<T> &&binding)
Конструктор свойства, привязанного к предоставленному выражению binding. В первый раз при чтении значения свойства выражение binding вычисляется. Всякий раз, когда изменяется зависимость от связывания, связывание будет перевычисляться в следующий раз при чтении значения этого свойства. При изменении значения свойства owner уведомляется через функцию обратного вызова.
[default] QObjectBindableProperty::QObjectBindableProperty(Class *owner, const QPropertyBinding<T> &binding)
Конструктор свойства, привязанного к предоставленному выражению binding. В первый раз при чтении значения свойства выражение binding вычисляется. Всякий раз, когда изменяется зависимость от связывания, связывание будет перевычисляться в следующий раз при чтении значения этого свойства. При изменении значения свойства owner уведомляется через функцию обратного вызова.
шаблон <typename Functor> QObjectBindableProperty::QObjectBindableProperty(Functor &&f)
Конструктор свойства, привязанного к предоставленному выражению связывания f. В первый раз при чтении значения свойства выражение связывания вычисляется. Всякий раз, когда изменяется зависимость от связывания, связывание будет перевычисляться в следующий раз при чтении значения этого свойства.
QObjectBindableProperty::QObjectBindableProperty(T &&initialValue)
Перемещающий конструктор свойства со значением initialValue.
QObjectBindableProperty::QObjectBindableProperty(const T &initialValue)
Конструктор свойства со значением initialValue.
QObjectBindableProperty::QObjectBindableProperty()
Конструктор свойства со значением по умолчанию для типа T.
[default] QObjectBindableProperty::~QObjectBindableProperty()
Деструктор свойства.
QPropertyBinding<T> QObjectBindableProperty::binding() const
Возвращает выражение привязки, связанное с этим свойством. Если такая ассоциация отсутствует, будет возвращена QPropertyBinding<T>, сконструированная по умолчанию.
См. также setBinding().
bool QObjectBindableProperty::hasBinding() const
Возвращает true, если свойство связано с привязкой; иначе — false.
template <typename Functor> QPropertyChangeHandler<Functor> QObjectBindableProperty::onValueChanged(Functor f)
Регистрирует заданный функциональный объект f в качестве обратного вызова, который будет вызываться всякий раз, когда значение свойства изменяется.
Обратный вызов f должен быть типом с обычным оператором вызова () без параметров. Это означает, что вы можете предоставить выражение лямбда C++, std::function или даже пользовательскую структуру с оператором вызова.
Возвращаемый объект обработчика изменений свойства отслеживает регистрацию. При выходе из области видимости объект обработчика аннулирует регистрацию обратного вызова.
QPropertyBinding<T> QObjectBindableProperty::setBinding(const QPropertyBinding<T> &newBinding)
Связывает значение этого свойства с предоставленным выражением newBinding и возвращает ранее связанную привязку. При первом чтении значения свойства выражение привязки вычисляется. Всякий раз, когда изменяется зависимость привязки, привязка будет перевычислена в следующий раз, когда будет читаться значение этого свойства. При изменении значения свойства владелец уведомляется с помощью функции обратного вызова.
См. также binding().
bool QObjectBindableProperty::setBinding(const QUntypedPropertyBinding &newBinding)
Это перегруженная функция.
Связывает значение этого свойства с предоставленным выражением newBinding. При первом чтении значения свойства выражение привязки вычисляется. Всякий раз, когда изменяется зависимость привязки, привязка будет перевычислена в следующий раз, когда будет читаться значение этого свойства.
Возвращает true , если тип этого свойства совпадает с типом, возвращаемым функцией привязки; false в противном случае.
template <typename Functor> QPropertyBinding<T> QObjectBindableProperty::setBinding(Functor f)
Это перегруженная функция.
Связывает значение этого свойства с предоставленным функциональным объектом f и возвращает ранее связанную привязку. При первом чтении значения свойства выражение привязки вычисляется, вызвав оператор вызова () для f. Всякий раз, когда изменяется зависимость привязки, привязка будет перевычислена в следующий раз, когда будет читаться значение этого свойства. При изменении значения свойства владелец уведомляется с помощью функции обратного вызова.
template <typename Functor> QPropertyChangeHandler<Functor> QObjectBindableProperty::subscribe(Functor f)
Подписывает заданный функциональный объект f в качестве обратного вызова, который вызывается немедленно и каждый раз, когда значение свойства изменяется в будущем.
Обратный вызов f должен быть типом с обычным оператором вызова () без параметров. Это означает, что вы можете предоставить выражение лямбда C++, std::function или даже пользовательскую структуру с оператором вызова.
Возвращаемый объект обработчика изменений свойства отслеживает подписку. При выходе из области видимости объект обработчика отписывает обратный вызов.
QPropertyBinding<T> QObjectBindableProperty::takeBinding()
Отсоединяет выражение привязки от этого свойства и возвращает его. После вызова этой функции значение свойства будет изменяться только в том случае, если вы присвоите ему новое значение или установите новую привязку.
QObjectBindableProperty::parameter_type QObjectBindableProperty::value() const
Возвращает значение свойства. Это может вычислить выражение привязки, связанное с этим свойством, прежде чем вернуть значение.
См. также setValue().
Документация макросов
[since 6.0] Q_OBJECT_BINDABLE_PROPERTY(containingClass, type, name, signal)
Объявляет QObjectBindableProperty внутри containingClass типа type с именем name. Если задан необязательный аргумент signal, этот сигнал будет выпущен, когда свойство будет помечено как изменённое.
Эта функция была введена в Qt 6.0.
См. также Систему свойств Qt и Связанные свойства Qt.
[since 6.0] Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(containingClass, type, name, initialvalue, signal)
Объявляет QObjectBindableProperty внутри containingClass типа type с именем name, инициализированное значением initialvalue. Если задан необязательный аргумент signal, этот сигнал будет выпущен, когда свойство будет помечено как изменённое.
Эта функция была введена в Qt 6.0.
См. также Систему свойств Qt и Связанные свойства Qt.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qobjectbindableproperty.html