QObjectComputedProperty Class
template <typename Class, typename T, auto Offset, auto Getter> class QObjectComputedPropertyQObjectComputedProperty クラスは、従来のプロパティをバインド可能なプロパティシステムに移行するためのテンプレートクラスです。詳細...
| ヘッダー: | #include <QObjectComputedProperty> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 以下のように: | Qt 6.0 |
| 継承元: | QUntypedPropertyData |
パブリック関数
マクロ
(since 6.0) | Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback) |
詳細な説明
QObjectComputedProperty はテンプレートクラスであり、テンプレートパラメータClass は所有するQObject 派生クラスを指定し、T は計算されたプロパティ値の型を指定し、Offset はクラス内のプロパティの位置を指定し、Getter はプロパティ値を計算するメンバ関数を指定します。
QObjectComputedProperty は、読み取りごとに再計算される読み取り専用プロパティです。計算された値は保存されません。これは、Qt Bindable Properties を実装する Qt 内部クラスの 1 つです。QObjectComputedProperty は通常、直接使用されることはなく、代わりにQ_OBJECT_COMPUTED_PROPERTY マクロを使用してそのインスタンスが作成されます。
以下の例を参照してください。
class Client{};
class MyClassPrivate : public QObject
{
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)
};「バインダブルプロパティのゲッターとセッター」に記載されているゲッターに関するルールは、QObjectComputedProperty にも適用されます。特に、ゲッターはトリビアルであり、QObjectComputedProperty オブジェクトの値を返すだけでなければなりません。 QObjectComputedProperty に指定されるコールバックは、通常、QObjectComputedProperty によってのみ呼び出されるプライベートメソッドであるべきです。
QObjectComputedProperty は読み取り専用であるため、セッターは不要であり、また許可もされていません。
依存関係の処理に正しく関与するために、QObjectComputedProperty は、その値(QObjectComputedProperty に指定されたコールバックの結果)がいつ変更された可能性があるかを把握しておく必要があります。 コールバックで使用されるバインド可能なプロパティが変更されるたびに、これは自動的に行われます。バインド可能なプロパティではない値の変更によってコールバックの結果が変更される可能性がある場合、QObjectComputedProperty オブジェクトに対して `notify ` を呼び出すのは開発者の責任です。これにより、依存プロパティに潜在的な変更が通知されます。
なお、notify を呼び出すと、依存プロパティの変更ハンドラがトリガーされる可能性があり、そのハンドラはQObjectComputedPropertyがメンバーであるオブジェクトを使用する場合があります。したがって、notify は、遷移中または無効な状態にあるときは呼び出してはなりません。
QObjectComputedProperty は、ファイルの内容など、予告なく変更される可能性のある入力に依存する計算には適していません。
Q_OBJECT_COMPUTED_PROPERTY 、QProperty 、QObjectBindableProperty 、Qtのプロパティシステム、およびQtのバインド可能プロパティも参照してください 。
メンバ関数のドキュメント
[default] QObjectComputedProperty::QObjectComputedProperty()
QObjectComputedProperty のインスタンスをデフォルトコンストラクタで生成します。
マクロのドキュメント
[since 6.0] Q_OBJECT_COMPUTED_PROPERTY(containingClass, type, name, callback)
containingClass 内に、型がtype で、名前がname であるQObjectComputedProperty を宣言します。引数callback は、プロパティが評価される際に呼び出されるGETTER関数を指定します。
このマクロは Qt 6.0 で導入されました。
QObjectBindableProperty 、Qtのプロパティシステム、およびQtのバインド可能なプロパティも参照してください 。
© 2026 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.