C
Qul::ListProperty Struct
template <typename T> struct Qul::ListPropertyListPropertyクラスを使用して、指定された型のリストを保持します。詳細...
| Header: | #include <qul/listproperty.h> |
| Since: | Qt Quick Ultralite 2.9 |
パブリック関数
| ListProperty() | |
| void | append(T t) |
| T | at(int index) |
| void | clear() |
| int | count() const |
| bool | isDynamic() const |
| bool | isNull() const |
| bool | isStatic() const |
| Qul::ListProperty<T> & | load(const L &otherList) |
| void | removeLast() |
| void | replace(int index, T newValue) |
| void | setList(Qul::DynamicList<T> *l) |
| void | setList(Qul::StaticList<T> *l) |
| Qul::ListProperty<T> & | operator=(const L &otherList) |
| T | operator[](int index) const |
詳細説明
このクラスはC++オブジェクトのパブリックメンバとして使用します。このクラスのテンプレートパラメータは C++ の型を定義し、対応する QML の型にマッピングされます。
struct MyObjectWithList : public Qul::Object { Qul::ListProperty<int> list1; Qul::ListProperty<MyData *> list2; MyObjectWithList() { static Qul::StaticListFixed<int, 100> buffer; buffer.replace(0, 1); // ... further initialization list1.setList(&buffer); } };
C++のリストプロパティをQMLバインディングで使用することができます。
次の例でわかるように、JavaScript の配列をリストに代入することができます。
MyObjectWithList { // list1 is declared and initiated in c++ property int value: list1[0] // list2 is declared in c++ and initiated here list2: [ MyData { val: 100 }, MyData { val: 200 } ] }
グループ化されたプロパティでリストを宣言することも可能です。
struct MyObject : public Qul::Object { struct Grouped { Qul::Property<int> val1; Qul::Property<int> val2; Qul::ListProperty<int> list1; }; Grouped group; };
リストストレージ
QUL では、リストが成長するかしないかによって、2つのストレージタイプを選択することができます。
Qul::ListProperty 、setList 関数を使用して、次のように明示的にストレージを設定することができます。here
ダイナミック・リスト
DynamicList は特別なキーワードを持たないQMLリストのデフォルトストレージです。 Qt Quick Ultraliteはリンクリストを使ってヒープにアイテムを格納します。リストが大きくなることがわかっている場合のみDynamicList を使い、そうでない場合はstatic_list を使ってください。
Qul::ListProperty<int> list; list.setList(new Qul::DynamicList<int>());
静的リスト
ヒープ割り当てを避けるために、StaticList を代わりに使うことができます。StaticList 、配列ポインタとそのサイズだけで静的にメモリーを確保できるので、実行時のメモリーのオーバーヘッドを減らすことができます。
//... declaration Qul::ListProperty<int> list; int data[10]; Qul::StaticList<int> storage; //... initialization storage.size = 10; storage.data = data; list.setList(storage);
静的リスト固定
StaticList と一緒に配列を宣言し、両方を初期化するのはよくあるパターンです。StaticListFixed (inheritsStaticList )を使えば、それを簡略化できるので、ListPropertyのストレージとして使うことができます。
管理されていない外部ポインタに依存するStaticList とは異なり、StaticListFixed は配列を内部で管理し、破棄時に配列をクリーンアップします。
// ... declaration Qul::ListProperty<int> list; // T t[N=10] will be added as a member of the StaticListFixed Qul::StaticListFixed<int, 10> staticList; // ... initialization and usage list.setList(&staticList);
サポートされる操作
ListProperty は以下の操作をサポートしている。なお、使用するストレージによっては操作できない場合があるため、これらの制限機能を使用する場合は、事前に正しいストレージを設定する必要がある。
append():リストの末尾に新しい項目を追加する。StaticList配列は成長できないので、DynamicListでのみサポートされる。count():両方のストレージタイプでサポートされています。at(index):指定されたインデックスの項目を返します。operator[]:指定されたインデックスの項目を返します。atとは異なり、定数の項目を返します。replace(index,newValue):指定されたインデックスの項目を新しい項目で置き換えます。clear():DynamicListの LinkedList 上のすべてのノードを削除します。StaticListではサポートされていません。removeLast():リストの最後の項目を削除します。DynamicList でのみサポートされています。
list およびQML Basic Typesも参照してください 。
メンバ関数ドキュメント
ListProperty::ListProperty()
特定のList Storage 型を持たない ListProperty を作成します。
void ListProperty::append(T t)
新しい項目をリストの最後に追加し、その値をt に設定する。
注: この機能はDynamicList ストレージでのみサポートされています。
T ListProperty::at(int index)
指定されたindex にある項目を返す。
基本型を変更したい場合は、代わりにListProperty::replace を使う。
void ListProperty::clear()
DynamicList の LinkedList 上のすべてのノードを削除します。
注意: この関数はDynamicList ストレージでのみサポートされています。
int ListProperty::count() const
リストに含まれる項目の数を返します。
bool ListProperty::isDynamic() const
リストがDynamicList ストレージを使用している場合はtrue を返し、そうでない場合はfalse を返す。
bool ListProperty::isNull() const
リストが初期化されていない場合はtrue を返し、そうでない場合はfalse を返す。
bool ListProperty::isStatic() const
リストがStaticList ストレージを使用している場合はtrue を返し、そうでない場合はfalse を返す。
template <typename L> Qul::ListProperty<T> &ListProperty::load(const L &otherList)
Qul::ListProperty::operator= と同じルールで、otherList の項目をL のリストにコピーする。
void ListProperty::removeLast()
リストの最後の項目を削除する。
注: この機能はDynamicList ストレージでのみサポートされています。
void ListProperty::replace(int index, T newValue)
指定されたindex の項目の値をnewValue に設定する。
void ListProperty::setList(Qul::DynamicList<T> *l)
リストのストレージとしてl DynamicList を使用する。 Qt Quick Ultralite はQML のlist を初期化する際に暗黙的にこの関数を呼び出します。
void ListProperty::setList(Qul::StaticList<T> *l)
リストのストレージとしてl StaticList を使用してください。 Qt Quick Ultraliteは、QML のstatic_list またはreadonly キーワードでリストを初期化する際に、暗黙的にこの関数を呼び出します。
template <typename L> Qul::ListProperty<T> &ListProperty::operator=(const L &otherList)
otherList ListProperty の項目を にロードする。L
代入演算子は、2つのリスト、L とotherList のサイズに応じて、それらの格納タイプに関係なく、以下のルールを使用する:
LのサイズがotherListのサイズより大きい場合、Lの項目はotherListの項目で置き換えられ、otherListのサイズまで置き換えられる。LのサイズがotherListのサイズより小さい場合、LのアイテムはotherListのアイテムに置き換えられ、Lのサイズまで置き換えられる。LのサイズがotherListのサイズと等しい場合、LのアイテムはotherListのアイテムに置き換えられ、Lのサイズまで置き換えられる。otherListの項目の型は、Lリストの項目の型と同じでなければならない。
代入演算子はQul::ListProperty::load
T ListProperty::operator[](int index) const
指定されたindex にある項目を返す。
基本型を変更したい場合は、代わりにListProperty::replace を使用してください。
特定の Qt ライセンスの下で利用可能です。
詳細はこちら。