このページでは

C

Qul::ListProperty Struct

template <typename T> struct Qul::ListProperty

ListProperty クラスを使用して、指定された型のリストを保持します。詳細...

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 とともに配列を宣言し、両方を初期化するのはよくあるパターンです。これを簡略化するために、StaticListFixedStaticList を継承)を使用できます。これにより、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 に読み込みます。

代入演算子は、LotherList の 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 ライセンスの下で利用可能です。
詳細はこちらをご覧ください。