QQmlListProperty Class
template <typename T> class QQmlListPropertyQQmlListProperty クラスを使用すると、アプリケーションは `QObject` を継承したクラスのリストのようなプロパティを QML に公開することができます。詳細...
| ヘッダー: | #include <QQmlListProperty> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
| qmake: | QT += qml |
パブリック型
パブリック関数
| QQmlListProperty(QObject *object, QList<T *> *list) | |
| QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at) | |
| QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear) | |
| QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear, QQmlListProperty<T>::ReplaceFunction replace, QQmlListProperty<T>::RemoveLastFunction removeLast) | |
| bool | operator==(const QQmlListProperty<T> &other) const |
パブリック変数
マクロ
| QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND | |
| QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE | |
| QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT |
詳細な説明
QMLには、複数のオブジェクト値を割り当てることができるリストプロパティが多数あります。QMLでのリストプロパティの使用例は以下の通りです:
FruitBasket {
fruit: [
Apple {},
Orange{},
Banana{}
]
}QQmlListProperty は、QML がリストに対して実行できる一連の操作(項目の追加、項目の取得、リストのクリア)を表す関数ポインタのグループをカプセル化しています。将来的には、追加の操作がサポートされる可能性があります。すべてのリストプロパティは append 操作を実装する必要がありますが、それ以外の操作はオプションです。
リストプロパティを提供するには、C++ クラスが操作のコールバックを実装し、プロパティのゲッターから適切な QQmlListProperty 値を返す必要があります。リストプロパティにはセッターを設けてはいけません。上記の例では、Q_PROPERTY() の宣言は次のようになります:
Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)QMLのリストプロパティは型安全です。テンプレートパラメータT は、リストに格納できるQObject 派生型を指定します。この場合、Fruit はQObject 型であり、Apple 、Orange 、Banana のすべてがこれから派生しています。
QQmlListReference を使用すると、多少のオーバーヘッドを犠牲にする代わりに、C++ から QQmlListProperty を操作するための、より使いやすい API を利用できます。
第5章「リストプロパティ型の使用」およびQQmlListReferenceも参照してください 。
メンバ型のドキュメント
[alias] QQmlListProperty::AppendFunction
void (*)(QQmlListProperty<T> *property, T *value) の同義語。
リスト `property` に `value ` を追加します。
[alias] QQmlListProperty::AtFunction
T *(*)(QQmlListProperty<T> *property, qsizetype index) の同義語。
リスト `property` の位置 `index ` にある要素を返します。
[alias] QQmlListProperty::ClearFunction
void (*)(QQmlListProperty<T> *property) の同義語。
リスト「property 」をクリアします。
[alias] QQmlListProperty::CountFunction
qsizetype (*)(QQmlListProperty<T> *property) の同義語。
リスト `property` に含まれる要素の数を返します。
[alias] QQmlListProperty::RemoveLastFunction
void (*)(QQmlListProperty<T> *property) の同義語。
リスト `property` から最後の要素を削除します。
[alias] QQmlListProperty::ReplaceFunction
void (*)(QQmlListProperty<T> *property, qsizetype index, T *value) の同義語。
リスト `property ` の位置 `index ` にある要素を `value` に置き換えます。
メンバ関数のドキュメント
QQmlListProperty::QQmlListProperty(QObject *object, QList<T *> *list)
既存のQList からQQmlListPropertyの値を作成するための便利なコンストラクタlist 。リストを所有するobject と、list そのものを指定する必要があり、これらを参照するQQmlListPropertyを保持している間は、これらを存続させておく必要があります。
これは、QList をバックエンドとするQQmlListPropertyを提供する最も簡単かつ安全な方法であり、ほとんどの場合にこれを使用すべきです。典型的な呼び出しは次のようになります:
QQmlListProperty<PieSlice> PieChart::slices()
{
return QQmlListProperty<PieSlice>(this, &m_slices);
}QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at)
一連の操作関数 `count ` および `at` から、読み取り専用の `QQmlListProperty` を構築します。不透明な `data ` ハンドルを渡すことが可能で、このハンドルは操作関数内からアクセスできます。このリストプロパティは、それを所有する `object ` が存在する限り有効です。
QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear)
一連の操作関数 `append`、`count`、`at`、および `clear` から `QQmlListProperty` を構築します。操作関数内からアクセス可能な不透明な `data ` ハンドルを引数として渡すことができます。このリストプロパティは、それを所有する `object ` が存在する限り有効です。
どの関数に対しても、Nullポインタを渡すことができます。Nullポインタが渡された場合、そのリストはデバッガによって設計も変更もできなくなります。すべての関数に対して有効なポインタを指定することを推奨します。
注: 生成される QQmlListPropertyは 、count 、at 、clear 、およびappend がすべて指定されている場合、これらを使用して removeLast() および replace() メソッドを合成します。この処理は時間がかかります。リストのクリア以外の操作を行う場合は、これらのメソッドを明示的に指定する必要があります。
QQmlListProperty::QQmlListProperty(QObject *object, void *data, QQmlListProperty<T>::AppendFunction append, QQmlListProperty<T>::CountFunction count, QQmlListProperty<T>::AtFunction at, QQmlListProperty<T>::ClearFunction clear, QQmlListProperty<T>::ReplaceFunction replace, QQmlListProperty<T>::RemoveLastFunction removeLast)
一連の操作関数 `append`、`count`、`at`、`clear`、`replace`、および `removeLast` から `QQmlListProperty` を構築します。不透明な `data ` ハンドルを渡すことが可能で、このハンドルには操作関数内からアクセスできます。このリストプロパティは、それを所有する `object ` が存在する限り有効です。
どの関数に対してもNullポインタを渡すことが可能であり、その場合、可能であれば他の関数を使用して当該関数が合成されます。QQmlListPropertyは、
- clear count およびremoveLast
- replace count 、 、 、およびat clear append
- replace count 、 、 、およびat removeLast append
- removeLast count 、 、 、およびat clear append
これらが指定されている場合はそれらを使用します。これは処理が遅くなりますが、お使いのリストがこれらのプリミティブに対してネイティブでより高速なオプションを提供していない場合は、合成されたものを使用することを検討してください。
さらに、count 、at 、append 、およびclear のいずれについても、明示的に指定もされず、合成もされていない場合、そのリストはデバッガーによって設計も変更もできなくなります。この状況を避けるため、十分な数の有効なポインタを指定することをお勧めします。
bool QQmlListProperty::operator==(const QQmlListProperty<T> &other) const
このQQmlListProperty がother と等しい場合はtrueを返し、そうでない場合はfalseを返します。
メンバ変数のドキュメント
void *QQmlListProperty::data
このフィールドには、任意のデータポインタを格納できます
アクセサメソッドを手動で実装し、カスタムデータを格納する必要がある場合は、QQmlListProperty のコンストラクタに任意のポインタを渡すことができ、後で同じQQmlListProperty にアクセスする際に、dataフィールドからそのポインタを取得することができます。
QQmlListProperty constructed from a QList pointer は、所有者からリストの内容に直接アクセスできないため、このフィールドを使用してリスト自体へのポインタを格納します。
QObject *QQmlListProperty::object
このフィールドには、QQmlListProperty
アクセサメソッドを手動で実装する際、操作対象のリストの内容を取得するためにこのフィールドを使用する必要がある場合があります。
マクロのドキュメント
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND
このマクロは、このクラスのリストプロパティの挙動を「Append」に設定します。派生型でこのプロパティに値を割り当てる場合、その値は基底クラスの値に追加されます。これがデフォルトの挙動です。
class FruitBasket : QObject {
Q_OBJECT
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND
Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)
public:
// ...
QQmlListProperty<Fruit> fruit();
// ...
};「 QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT 」、「QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE 」、および「QMLドキュメントによるオブジェクト型の定義」も参照してください 。
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE
このマクロは、このクラスのリストプロパティの挙動を「置換」に設定します。派生型でこのプロパティを割り当てる場合、その値は基底クラスの値に置き換えられます。
class FruitBasket : QObject {
Q_OBJECT
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE
Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)
public:
// ...
QQmlListProperty<Fruit> fruit();
// ...
};「 QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND 」、「QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT 」、および「QMLドキュメントによるオブジェクト型の定義」も参照してください 。
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT
このマクロは、このクラスのリストプロパティの挙動を「ReplaceIfNotDefault」に定義します。派生型でプロパティを割り当てる際、それがデフォルトプロパティでない限り、その値は基底クラスの値に置き換えられます。デフォルトプロパティの場合は、その値が基底クラスの値に追加されます。
class FruitBasket : QObject {
Q_OBJECT
QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE_IF_NOT_DEFAULT
Q_PROPERTY(QQmlListProperty<Fruit> fruit READ fruit)
public:
// ...
QQmlListProperty<Fruit> fruit();
// ...
};「 QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND 」、「QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_REPLACE 」、および「QMLドキュメントによるオブジェクト型の定義」も参照してください 。
© 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.