Класс QProperty
шаблон <typename T> class QPropertyКласс QProperty — это шаблонный класс, который позволяет автоматически связывать свойства. Подробнее...
| Заголовок: | #include <QProperty> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| С момента: | Qt 6.0 |
| Наследует: | QPropertyData |
Открытые функции
| QProperty(T &&initialValue) | |
| QProperty(const T &initialValue) | |
| QProperty(Functor &&f) | |
| QProperty(const QPropertyBinding<T> &binding) | |
| QProperty() | |
| QProperty<T> & | operator=(const QPropertyBinding<T> &newBinding) |
| ~QProperty() | |
| QPropertyBinding<T> | binding() 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(QProperty::rvalue_ref newValue) |
| void | setValue(QProperty::parameter_type newValue) |
| QPropertyChangeHandler<Functor> | subscribe(Functor f) |
| QPropertyBinding<T> | takeBinding() |
| QProperty::parameter_type | value() const |
| QProperty<T> & | operator=(QProperty::rvalue_ref newValue) |
| QProperty<T> & | operator=(QProperty::parameter_type newValue) |
Подробное описание
QProperty<T> — это обобщённый контейнер, который хранит экземпляр T. Вы можете присвоить ему значение и прочитать его с помощью функции value() или оператора преобразования T. Вы также можете привязать свойство к выражению, которое динамически вычисляет значение — выражению привязки. Оно представлено лямбда-выражением C++ и может использоваться для выражения взаимосвязей между различными свойствами в вашем приложении.
Выражение привязки вычисляет значение, считывая другие значения QProperty. За кулисами эта зависимость отслеживается. Всякий раз, когда обнаруживается изменение в любой зависимости свойства, выражение привязки переоценивается, и новый результат применяется к свойству. Это происходит лениво, маркируя привязку как грязную и оценивая её только при запросе значения свойства. Например:
QProperty<QString> firstname("John");
QProperty<QString> lastname("Smith");
QProperty<int> age(41);
QProperty<QString> fullname;
fullname.setBinding([&]() { return firstname.value() + " " + lastname.value() + " age: " + QString::number(age.value()); });
qDebug() << fullname.value(); // Prints "John Smith age: 41"
firstname = "Emma"; // Marks binding expression as dirty
qDebug() << fullname.value(); // Re-evaluates the binding expression and prints "Emma Smith age: 41"
// Birthday is coming up
age.setValue(age.value() + 1);
qDebug() << fullname.value(); // Re-evaluates the binding expression and prints "Emma Smith age: 42" При присвоении нового значения свойству firstname, выражение привязки для fullname помечается как грязное. Таким образом, когда последнее qDebug() утверждение пытается прочитать значение имени свойства fullname, выражение снова оценивается, firstname() вызывается снова и возвращает новое значение.
Поскольку выражения привязки представляют собой лямбда-выражения C++, они могут выполнять любые действия, возможные в C++. Это включает вызов других функций. Если эти функции обращаются к значениям, хранящимся в QProperty, они автоматически становятся зависимостями привязки.
Выражения привязки могут использовать свойства любого типа, поэтому в приведённом выше примере возраст — это целое число, преобразованное в строковое значение, но зависимость полностью отслеживается.
Отслеживание свойств
Иногда взаимосвязи между свойствами нельзя выразить с помощью привязок. Вместо этого вам может потребоваться выполнять пользовательский код всякий раз, когда изменяется значение свойства, и вместо присвоения значения другому свойству передавать его в другие части вашего приложения. Например, запись данных в сокет сети или печать отладочной информации. QProperty предоставляет два механизма для отслеживания.
Вы можете зарегистрировать функцию обратного вызова, которая будет вызываться всякий раз, когда изменяется значение свойства, используя onValueChanged(). Если вы хотите, чтобы обратный вызов также вызывался для текущего значения свойства, зарегистрируйте свой обратный вызов с помощью subscribe() вместо этого.
Документация по функциям-членам
QProperty<T> &QProperty::operator=(QProperty::parameter_type newValue)
QProperty<T> &QProperty::operator=(QProperty::rvalue_ref newValue)
Присваивает newValue этому свойству и возвращает ссылку на это QProperty.
void QProperty::setValue(QProperty::parameter_type newValue)
void QProperty::setValue(QProperty::rvalue_ref newValue)
Присваивает newValue этому свойству и удаляет связанную с свойством привязку, если она присутствует.
[default] QProperty::QProperty(T &&initialValue)
Создаёт свойство перемещением со предоставленным initialValue.
[default] QProperty::QProperty(const T &initialValue)
Создаёт свойство с предоставленным initialValue.
шаблон <typename Functor> QProperty::QProperty(Functor &&f)
Создаёт свойство, связанное с предоставленным выражением привязки f. В первый раз при чтении значения свойства привязка оценивается. Всякий раз, когда изменяется зависимость привязки, привязка будет переоцениваться при следующем чтении значения этого свойства.
QProperty::QProperty(const QPropertyBinding<T> &binding)
Создаёт свойство, связанное с предоставленным выражением binding. В первый раз при чтении значения свойства привязка оценивается. Всякий раз, когда изменяется зависимость привязки, привязка будет переоцениваться при следующем чтении значения этого свойства.
QProperty::QProperty()
Создаёт свойство с экземпляром T по умолчанию.
[default] QProperty<T> &QProperty::operator=(const QPropertyBinding<T> &newBinding)
Связывает значение этого свойства с предоставленным выражением newBinding и возвращает ссылку на это свойство. В первый раз при чтении значения свойства привязка оценивается. Всякий раз, когда изменяется зависимость привязки, привязка будет переоцениваться при следующем чтении значения этого свойства.
QProperty::~QProperty()
Уничтожает свойство.
QPropertyBinding<T> QProperty::binding() const
Возвращает выражение привязки, связанное с этим свойством. Если такой ассоциации не существует, возвращается QPropertyBinding<T> по умолчанию.
См. также setBinding().
шаблон <typename Functor> QPropertyChangeHandler<Functor> QProperty::onValueChanged(Functor f)
Регистрирует заданный функтор f в качестве обратного вызова, который будет вызываться всякий раз, когда значение свойства изменяется.
Обратный вызов f должен быть типом, имеющим обычный оператор вызова () без параметров. Это означает, что вы можете предоставить выражение лямбда C++, std::function или даже пользовательскую структуру с оператором вызова.
Возвращаемый объект обработчика изменений свойства отслеживает регистрацию. При выходе из области видимости обратный вызов дерегистрируется.
QPropertyBinding<T> QProperty::setBinding(const QPropertyBinding<T> &newBinding)
Связывает значение этого свойства с предоставленным выражением newBinding и возвращает ранее связанное связывание. В первый раз при чтении значения свойства связывание оценивается. Всякий раз, когда изменяется зависимость связывания, связывание будет переоцениваться в следующий раз при чтении значения этого свойства.
См. также binding().
bool QProperty::setBinding(const QUntypedPropertyBinding &newBinding)
Это перегруженный метод.
Связывает значение этого свойства с предоставленным выражением newBinding. В первый раз при чтении значения свойства связывание оценивается. Всякий раз, когда изменяется зависимость связывания, связывание будет переоцениваться в следующий раз при чтении значения этого свойства.
Возвращает true, если тип этого свойства совпадает с типом, возвращаемым функцией связывания; в противном случае возвращает false.
template <typename Functor> QPropertyBinding<T> QProperty::setBinding(Functor f)
Это перегруженный метод.
Связывает значение этого свойства с предоставленным функтором f и возвращает ранее связанное связывание. В первый раз при чтении значения свойства связывание оценивается, вызывая оператор вызова () функтора f. Всякий раз, когда изменяется зависимость связывания, связывание будет переоцениваться в следующий раз при чтении значения этого свойства.
template <typename Functor> QPropertyChangeHandler<Functor> QProperty::subscribe(Functor f)
Подписывает заданный функтор f как обратный вызов, который вызывается немедленно и всякий раз, когда значение свойства изменяется в будущем.
Обратный вызов f должен быть типом, имеющим обычный оператор вызова () без параметров. Это означает, что вы можете предоставить выражение лямбда C++, std::function или даже пользовательскую структуру с оператором вызова.
Возвращаемый объект обработчика изменений свойства отслеживает подписку. При выходе из области видимости обратный вызов отписывается.
QPropertyBinding<T> QProperty::takeBinding()
Отсоединяет выражение связывания от этого свойства и возвращает его. После вызова этой функции значение свойства изменится только в том случае, если вы присвоите ему новое значение или установите новое связывание.
QProperty::parameter_type QProperty::value() const
Возвращает значение свойства. Это может оценить выражение связывания, привязанное к этому свойству, перед возвращением значения.
См. также setValue().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qproperty.html