このページでは

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++オブジェクトのパブリックメンバとして使用します。このクラスのテンプレートパラメータは 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::ListPropertysetList 関数を使用して、次のように明示的にストレージを設定することができます。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 はQMLlist を初期化する際に暗黙的にこの関数を呼び出します。

void ListProperty::setList(Qul::StaticList<T> *l)

リストのストレージとしてl StaticList を使用してください。 Qt Quick Ultraliteは、QMLstatic_list またはreadonly キーワードでリストを初期化する際に、暗黙的にこの関数を呼び出します。

template <typename L> Qul::ListProperty<T> &ListProperty::operator=(const L &otherList)

otherList ListProperty の項目を にロードする。L

代入演算子は、2つのリスト、LotherList のサイズに応じて、それらの格納タイプに関係なく、以下のルールを使用する:

  • 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 ライセンスの下で利用可能です。
詳細はこちら。