このページでは

QProperty Class

template <typename T> class QProperty

QProperty クラスは、プロパティの自動バインディングを可能にするテンプレートクラスです。詳細...

ヘッダー: #include <QProperty>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
以下のように: Qt 6.0
継承元: QPropertyData

QProperty の比較

カテゴリ比較可能な型
等価性QProperty
等価性T.

パブリック関数

QProperty()
QProperty(Functor &&f)
QProperty(T &&initialValue)
QProperty(const QPropertyBinding<T> &binding)
QProperty(const T &initialValue)
~QProperty()
(since 6.2) QPropertyNotifier addNotifier(Functor f)
QPropertyBinding<T> binding() const
QPropertyChangeHandler<Functor> onValueChanged(Functor f)
QPropertyBinding<T> setBinding(const QPropertyBinding<T> &newBinding)
(since 6.0) QPropertyBinding<T> setBinding(Functor f)
bool setBinding(const QUntypedPropertyBinding &newBinding)
void setValue(QProperty<T>::parameter_type newValue)
void setValue(QProperty<T>::rvalue_ref newValue)
(since 6.0) QPropertyChangeHandler<Functor> subscribe(Functor f)
QPropertyBinding<T> takeBinding()
QProperty<T>::parameter_type value() const
QProperty<T> &operator=(QProperty<T>::parameter_type newValue)
QProperty<T> &operator=(QProperty<T>::rvalue_ref newValue)
(since 6.2) void beginPropertyUpdateGroup()
(since 6.2) void endPropertyUpdateGroup()

詳細な説明

QProperty は、テンプレートパラメータT によってプロパティ値の型が指定されるテンプレートクラスです。

QProperty<T> は、Qt のバインド可能なプロパティを実装するクラスの 1 つです。これは、T のインスタンスを保持するコンテナです。このコンテナに値を割り当てたり、value() 関数や T の変換演算子を使用してその値を読み取ったりすることができます。 また、このプロパティを、値を動的に計算する式(バインディング式)に紐付けることもできます。これは C++ のラムダ式として表現され、アプリケーション内の異なるプロパティ間の関係を表現するために使用できます。

注: QMLの場合 、Q_PROPERTY 内で BINDABLE キーワードを使用して `QProperty ` を公開することが重要です。これにより、QML エンジンはこれをバインダブルインターフェースとして使用し、プロパティのバインディングを設定します。その結果、バインディングは通常の API を通じて C++ から操作可能になります: QProperty<T>::onValueChanged、QProperty::takeBinding 、および QBindable::hasBindingプロパティが BINDABLE である場合、エンジンは変更の通知を受けるために C++ プロパティシステムに組み込まれた変更追跡機能を使用し、シグナルの発火に依存することはありません。

メンバ関数のドキュメント

[default] QProperty::QProperty()

T のデフォルト構築されたインスタンスを持つプロパティを作成します。

[explicit] template <typename Functor> QProperty::QProperty(Functor &&f)

指定されたバインディング式 `f` に紐づくプロパティを作成します。このプロパティの値は、新しいバインディングを評価した結果に設定されます。バインディングの依存関係が変更されるたびに、バインディングが再評価され、それに応じてプロパティの値が更新されます。

[explicit implicit] QProperty::QProperty(T &&initialValue)

Move-Constructs:指定されたinitialValue を使用してプロパティを構築します。

[explicit] QProperty::QProperty(const QPropertyBinding<T> &binding)

指定されたbinding 式に紐づくプロパティを作成します。プロパティの値は、新しいバインディングを評価した結果に設定されます。バインディングの依存関係が変更されるたびに、バインディングが再評価され、それに応じてプロパティの値が更新されます。

[explicit implicit] QProperty::QProperty(const T &initialValue)

指定されたinitialValue を使用してプロパティを作成します。

[default] QProperty::~QProperty()

その特性を破壊する。

[since 6.2] template <typename Functor> QPropertyNotifier QProperty::addNotifier(Functor f)

指定されたファンクタf を、プロパティの値が変更されるたびに呼び出されるコールバックとして登録します。

コールバック `f ` は、引数を持たない単純な呼び出し演算子 `() ` を持つ型であることが求められます。つまり、C++ のラムダ式、`std::function`、あるいは呼び出し演算子を持つカスタム構造体などを指定することができます。

返されるプロパティ変更ハンドラオブジェクトは、サブスクリプションを追跡します。このオブジェクトがスコープ外になると、コールバックのサブスクリプションは解除されます。

このメソッドは、返されるオブジェクトがテンプレートではないため、場合によっては `onValueChanged()` よりも使いやすくなっています。そのため、例えばクラスのメンバとして保存するのがより簡単です。

この関数は Qt 6.2 で導入されました。

onValueChanged() およびsubscribe()も参照してください 。

QPropertyBinding<T> QProperty::binding() const

このプロパティに関連付けられているバインディング式を返します。そのような関連付けが存在しない場合は、デフォルトで生成された QPropertyBinding<T> が返されます。

setBinding()も参照してください 。

template <typename Functor> QPropertyChangeHandler<Functor> QProperty::onValueChanged(Functor f)

指定されたファンクタ `f ` を、プロパティの値が変更されるたびに呼び出されるコールバックとして登録します。値が変更されるたびに、コンテキストに応じて、ハンドラが即座に呼び出されるか、または呼び出しが延期されます。

コールバック `f ` は、引数を持たない単純な呼び出し演算子 `() ` を持つ型であることが求められます。つまり、C++ のラムダ式、`std::function`、あるいは呼び出し演算子を持つカスタム構造体などを指定することができます。

返されるプロパティ変更ハンドラオブジェクトは、登録情報を追跡します。このオブジェクトがスコープ外になると、コールバックの登録は解除されます。

QPropertyBinding<T> QProperty::setBinding(const QPropertyBinding<T> &newBinding)

このプロパティの値を、指定されたnewBinding 式に関連付け、以前に関連付けられていたバインディングを返します。プロパティの値は、新しいバインディングを評価した結果に設定されます。バインディングの依存関係が変更されるたびに、バインディングは再評価され、プロパティの値はそれに応じて更新されます。

binding()も参照してください 。

[since 6.0] template <typename Functor> QPropertyBinding<T> QProperty::setBinding(Functor f)

このプロパティの値を、指定されたファンクタ `f ` と関連付け、以前関連付けられていたバインディングを返します。プロパティの値は、新しいバインディングを評価した結果に設定されます。バインディングの依存関係が変更されるたびに、バインディングは再評価され、プロパティの値はそれに応じて更新されます。

これはオーバーロードされた関数です。

この関数は Qt 6.0 で導入されました。

「プロパティバインディングの定義」も参照してください 。

bool QProperty::setBinding(const QUntypedPropertyBinding &newBinding)

このプロパティの値を、指定されたnewBinding 式に関連付けます。プロパティの値は、新しいバインディングを評価した結果に設定されます。バインディングの依存関係が変更されるたびに、バインディングが再評価され、それに応じてプロパティの値が更新されます。

このプロパティの型が、バインディング関数が返す型と同じ場合は true を返し、そうでない場合は false を返します。

これはオーバーロードされた関数です。

void QProperty::setValue(QProperty<T>::parameter_type newValue)

void QProperty::setValue(QProperty<T>::rvalue_ref newValue)

このプロパティにnewValue を割り当て、存在する場合、そのプロパティに関連付けられているバインディングを削除します。

[since 6.0] template <typename Functor> QPropertyChangeHandler<Functor> QProperty::subscribe(Functor f)

指定されたファンクタ `f ` を、即座に、および将来プロパティの値が変更されるたびに呼び出されるコールバックとして登録します。値が変更されるたびに、コンテキストに応じて、ハンドラが即座に呼び出されるか、または呼び出しが先送りされます。

コールバック `f ` は、コピー可能であり、引数を持たない単純な `operator()` を持つ型であることが求められます。つまり、C++ のラムダ式、`std::function`、あるいは `operator()` を持つカスタム構造体などを指定することができます。

返されるプロパティ変更ハンドラオブジェクトは、サブスクリプションを追跡します。このオブジェクトがスコープ外になると、コールバックのサブスクリプションは解除されます。

この関数は Qt 6.0 で導入されました。

QPropertyBinding<T> QProperty::takeBinding()

このプロパティからバインディング式を切り離し、それを返します。この関数を呼び出した後、プロパティの値が変更されるのは、新しい値を代入した場合、または新しいバインディングが設定された場合のみとなります。

QProperty<T>::parameter_type QProperty::value() const

プロパティの値を返します。値を返す前に、このプロパティに紐付けられているバインディング式が評価される場合があります。

setValue()も参照してください 。

QProperty<T> &QProperty::operator=(QProperty<T>::parameter_type newValue)

QProperty<T> &QProperty::operator=(QProperty<T>::rvalue_ref newValue)

このプロパティにnewValue を割り当て、このQProperty への参照を返します。

関連する非メンバー

[since 6.2] void beginPropertyUpdateGroup()

プロパティ更新グループの開始を示します。このグループ内では、プロパティを変更しても、依存するプロパティは直ちに更新されず、変更通知もトリガーされません。これらは、endPropertyUpdateGroup を呼び出してグループが終了するまで延期されます。

グループはネスト可能です。その場合、最外側のグループが終了して初めて、更新の遅延が解除されます。

注:変更 通知は、そのグループの影響を受けるすべてのプロパティ値が新しい値に更新された後にのみ送信されます。これにより、複数のプロパティを更新する必要がある場合でもクラスの不変条件を再確立でき、外部のオブザーバーが一貫性のない状態を検知することを防ぐことができます。

この関数は Qt 6.2 で導入されました。

関連項目: Qt::endPropertyUpdateGroup およびQScopedPropertyUpdateGroup 。

[since 6.2] void endPropertyUpdateGroup()

プロパティ更新グループを終了します。最外側のグループが終了した場合、この時点で遅延バインディングの評価と通知が行われます。

警告: beginPropertyUpdateGroup を事前に呼び出さずに endPropertyUpdateGroupを呼び出すと 、未定義の挙動が発生します。

この関数は Qt 6.2 で導入されました。

Qt::beginPropertyUpdateGroup およびQScopedPropertyUpdateGroupも参照してください 。

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