Класс QObjectComputedProperty
шаблон <typename Class, typename T, auto Offset, auto Getter> class QObjectComputedPropertyКласс QObjectComputedProperty — это шаблонный класс, помогающий перенести старые свойства в систему связываемых свойств. Подробнее...
| Заголовок: | #include <QObjectComputedProperty> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| С момента: | Qt 6.0 |
| Наследуется от: | QUntypedPropertyData |
Макросы
| Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback) |
Подробное описание
QObjectComputedProperty — это свойство только для чтения, которое пересчитывается при каждом чтении. Оно не хранит вычисленное значение. Это один из внутренних классов Qt, реализующих связываемые свойства Qt. QObjectComputedProperty обычно не используется напрямую, вместо этого его экземпляр создаётся с помощью макроса Q_OBJECT_COMPUTED_PROPERTY.
См. следующий пример.
class Client{};
class MyClassPrivate : public QObjectPrivate
{
public:
QList<Client> clients;
bool hasClientsActualCalculation() const { return clients.size() > 0; }
Q_OBJECT_COMPUTED_PROPERTY(MyClassPrivate, bool, hasClientsData,
&MyClassPrivate::hasClientsActualCalculation)
};
class MyClass : public QObject
{
Q_OBJECT
Q_PROPERTY(bool hasClients READ hasClients STORED false BINDABLE bindableHasClients)
public:
QBindable<bool> bindableHasClients()
{
return QBindable<bool>(&d_func()->hasClientsData);
}
bool hasClients() const
{
return d_func()->hasClientsData.value();
}
void addClient(const Client &c)
{
Q_D(MyClass);
d->clients.push_back(c);
// notify that the value could have changed
d->hasClientsData.markDirty();
}
private:
Q_DECLARE_PRIVATE(MyClass)
}; Правила для методов-получателей в методах-получателях и установщиках свойств связываемых свойств также применяются к QObjectComputedProperty. В частности, метод-получатель должен быть тривиальным и возвращать только значение объекта QObjectComputedProperty. Передаваемый в QObjectComputedProperty обратный вызов обычно является закрытым методом, который вызывается только объектом QObjectComputedProperty.
Метод-установщик не требуется и не допускается, так как QObjectComputedProperty — это свойство только для чтения.
Для правильной обработки зависимостей QObjectComputedProperty должен знать, когда его значение, результат обратного вызова, переданного ему, может измениться. Всякий раз, когда связываемое свойство, используемое в обратном вызове, изменяется, это происходит автоматически. Если результат обратного вызова может измениться из-за изменения значения, которое не является связываемым свойством, разработчик обязан вызвать markDirty в объекте QObjectComputedProperty. Это проинформирует зависимые свойства о потенциальном изменении.
Обратите внимание, что вызов markDirty может вызвать обработчики изменений в зависимых свойствах, которые могут, в свою очередь, использовать объект, членом которого является QObjectComputedProperty. Поэтому markDirty не должен вызываться в переходном или недопустимом состоянии.
QObjectComputedProperty не подходит для использования с вычислением, зависящим от любого входного значения, которое может измениться без предварительного уведомления, например, от содержимого файла.
См. также Q_OBJECT_COMPUTED_PROPERTY, QProperty, QObjectBindableProperty, Систему свойств Qt и Связываемые свойства Qt.
Документация по макросам
[since 6.0] Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback)
Объявляет QObjectComputedProperty внутри containingClass типа type с именем name. Аргумент callback указывает функцию-получатель, которая будет вызываться при оценке свойства.
Эта функция была представлена в Qt 6.0.
См. также QObjectBindableProperty, Систему свойств Qt и Связываемые свойства Qt.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qobjectcomputedproperty.html