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++オブジェクトのパブリックメンバーとして使用します。これにより、QML上ではそのオブジェクトのプロパティのリストとして公開されます。このクラスのテンプレートパラメータは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);
}
};QMLバインディングで、このC++リストプロパティを使用できます。
以下の例でわかるように、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 }
]
}また、Groupedプロパティ内でリストを宣言することも可能です
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 のcpp内で、以下に示すようにsetList 関数を使用することで、ストレージを明示的に設定できます。here
DynamicList
DynamicList は、特別なキーワードが指定されていない場合のQMLリストのデフォルトのストレージです。Qt Quick Ultraliteは、リンクドリストを使用してアイテムをヒープに格納します。DynamicList は、リストが確実に拡大することが分かっている場合にのみ使用してください。そうでない場合は、代わりにstatic_list を使用してください。
Qul::ListProperty<int> list;
list.setList(new Qul::DynamicList<int>());StaticList
ヒープ割り当てを避けるには、代わりにStaticList ストレージを使用できます。StaticList では、メモリを静的に割り当てるために必要なのは配列ポインタとそのサイズのみであるため、実行時のメモリオーバーヘッドを削減できます。
//... declaration
Qul::ListProperty<int> list;
int data[10];
Qul::StaticList<int> storage;
//... initialization
storage.size = 10;
storage.data = data;
list.setList(storage);StaticListFixed
StaticList とともに配列を宣言し、両方を初期化するのはよくあるパターンです。これを簡略化するために、StaticListFixed (StaticList を継承)を使用できます。これにより、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基本型」も参照してください 。
メンバ関数のドキュメント
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)
otherList にある項目を、Qul::ListProperty::operator= で使用されているのと同じルールに従って、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 に読み込みます。
代入演算子は、L とotherList の 2 つのリストのサイズに応じて、以下のルールに従います。これらは、リストの格納型には関係ありません。
LのサイズがotherListのサイズより大きい場合、L内の要素は、otherListのサイズに達するまで、otherList内の要素で置き換えられます。LのサイズがotherListのサイズより小さい場合、L内の項目は、Lのサイズを上限として、otherList内の項目に置き換えられます。LのサイズがotherListのサイズと等しい場合、L内の項目は、Lのサイズを上限として、otherList内の項目に置き換えられます。otherList内の項目の型は、Lリスト内の項目の型と同じである必要があります。
代入演算子は以下に基づいています。Qul::ListProperty::load
T ListProperty::operator[](int index) const
指定されたindex の項目を返します。
基本型を変更したい場合は、代わりにListProperty::replace を使用してください。
特定の Qt ライセンスの下で利用可能です。
詳細はこちらをご覧ください。