QObjectComputedProperty Class

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

QObjectComputedPropertyクラスは、古いプロパティをバインダブル・プロパティ・システムに移植するためのテンプレート・クラスです。詳細...

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

マクロ

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

詳細説明

QObjectComputedProperty は読み取り専用のプロパティで、読み取りのたびに再計算されます。計算された値は保存されません。Qt Bindable Properties を実装する Qt 内部クラスの 1 つです。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.notify();
    }
private:
    Q_DECLARE_PRIVATE(MyClass)
};

Bindable Property Getters and Settersにあるゲッターのルールは、QObjectComputedPropertyにも適用されます。特に、ゲッターは些細なもので、QObjectComputedPropertyオブジェクトの値を返すだけであるべきです。QObjectComputedPropertyに与えられるコールバックは、通常、QObjectComputedPropertyによってのみ呼び出されるプライベート・メソッドでなければならない。

QObjectComputedProperty は読み取り専用であるため、セッターは必要ありません。

依存関係の処理に正しく参加するために、QObjectComputedProperty は、その値(QObjectComputedProperty に与えられたコールバックの結果)がいつ変更されたかを知る必要があります。コールバックで使用されるバインド可能なプロパティが変更されるたびに、これは自動的に発生します。バインド可能なプロパティではない値が変更されたためにコールバックの結果が変更される可能性がある場合、QObjectComputedPropertyオブジェクトでnotify を呼び出すのは開発者の責任です。これにより、依存プロパティに変更の可能性が通知されます。

notify を呼び出すと、従属プロパティの変更ハンドラがトリガされ、そのハンドラが QObjectComputedProperty がメンバであるオブジェクトを使用する可能性があることに注意してください。そのため、notify は、過渡的な状態または無効な状態のときに呼び出してはならない。

QObjectComputedProperty は、ファイルの内容など、予告なしに変更される可能性のある入力に依存する計算での使用には適していません。

Q_OBJECT_COMPUTED_PROPERTY,QProperty,QObjectBindableProperty,Qtのプロパティ・システム,Qtのバインダブル・プロパティも参照してください

マクロ・ドキュメント

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

type 型のcontainingClass の内部で、name という名前でQObjectComputedProperty を宣言します。引数callback は、プロパティが評価されるときに呼び出される GETTER 関数を指定します。

このマクロは Qt 6.0 で導入されました。

QObjectBindablePropertyQt のプロパティシステムQt Bindable Propertiesも参照してください

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。