QObjectComputedProperty Class

template <typename Class, typename T, auto Offset, auto Getter> class QObjectComputedProperty

Die Klasse QObjectComputedProperty ist eine Vorlagenklasse, die dabei hilft, alte Eigenschaften auf das System der bindbaren Eigenschaften zu portieren. Mehr...

Kopfzeile: #include <QObjectComputedProperty>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Seit: Qt 6.0
Erbt: QUntypedPropertyData

Makros

(since 6.0) Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback)

Detaillierte Beschreibung

QObjectComputedProperty ist eine schreibgeschützte Eigenschaft, die bei jedem Lesen neu berechnet wird. Sie speichert den berechneten Wert nicht. Sie ist eine der Qt-internen Klassen, die Qt Bindable Properties implementieren. QObjectComputedProperty wird normalerweise nicht direkt verwendet, stattdessen wird eine Instanz davon mit Hilfe des Q_OBJECT_COMPUTED_PROPERTY Makros erstellt.

Siehe das folgende Beispiel.

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.notify();
    }
private:
    Q_DECLARE_PRIVATE(MyClass)
};

Die Regeln für Getter in Bindable Property Getters und Setters gelten auch für QObjectComputedProperty. Insbesondere sollte der Getter trivial sein und nur den Wert des QObjectComputedProperty-Objekts zurückgeben. Der Callback, der dem QObjectComputedProperty übergeben wird, sollte normalerweise eine private Methode sein, die nur vom QObjectComputedProperty aufgerufen wird.

Es ist kein Setter erforderlich oder erlaubt, da QObjectComputedProperty schreibgeschützt ist.

Um korrekt an der Behandlung von Abhängigkeiten teilzunehmen, muss QObjectComputedProperty wissen, wann sich sein Wert, das Ergebnis des ihm gegebenen Callbacks, geändert haben könnte. Wann immer sich eine bindbare Eigenschaft, die im Callback verwendet wird, ändert, geschieht dies automatisch. Wenn sich das Ergebnis des Callbacks aufgrund einer Änderung eines Wertes ändern könnte, der keine bindbare Eigenschaft ist, liegt es in der Verantwortung des Entwicklers, notify für das QObjectComputedProperty-Objekt aufzurufen. Dadurch werden abhängige Eigenschaften über die mögliche Änderung informiert.

Beachten Sie, dass der Aufruf von notify Änderungshandler in abhängigen Eigenschaften auslösen könnte, die wiederum das Objekt verwenden könnten, von dem QObjectComputedProperty ein Mitglied ist. Daher darf notify nicht aufgerufen werden, wenn es sich in einem Übergangs- oder ungültigen Zustand befindet.

QObjectComputedProperty eignet sich nicht für die Verwendung mit einer Berechnung, die von einer Eingabe abhängt, die sich unbemerkt ändern kann, wie z.B. der Inhalt einer Datei.

Siehe auch Q_OBJECT_COMPUTED_PROPERTY, QProperty, QObjectBindableProperty, Qt's Property System, und Qt Bindable Properties.

Makro-Dokumentation

[since 6.0] Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback)

Deklariert eine QObjectComputedProperty innerhalb containingClass vom Typ type mit dem Namen name. Das Argument callback gibt eine GETTER-Funktion an, die aufgerufen wird, wenn die Eigenschaft ausgewertet wird.

Dieses Makro wurde in Qt 6.0 eingeführt.

Siehe auch QObjectBindableProperty, Qt's Property System, und Qt Bindable Properties.

© 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.