モジュール
QtQml 2.1
クラス継承
QQmlInstantiator → QObject
プロパティー
active: bool = true
asynchronous: bool = false
count: int = 0 readonly
delegate: Component = null default
model: QVariant = 1
object: QtObject = null readonly
シグナル
objectAdded(int index, QtObject object)
objectRemoved(int index, QtObject object)
activeChanged()
asynchronousChanged()
countChanged()
delegateChanged()
modelChanged()
objectChanged()
メソッド
QtObject objectAt(int index)
説明
delegate に設定されたコンポーネントのオブジェクトを生成する。コンポーネントはビジュアルと非ビジュアルのどちらでもよい。
生成オブジェクトの親 QObject は Instantiator になる。ビジュアルオブジェクトを生成したときにはその parent は null になる。
active.qml:
import QtQuick 2.10
import QtQuick.Window 2.10
Window {
id: window
visible: true
width: 300; height: 300
Instantiator {
id: generator
model: [ "red", "green", "blue", "yellow", "purple" ]
active: false
Rectangle {
x: 25 + index*width; y: x
width: 50; height: width
color: modelData
Component.onCompleted: {
print("ctor", this, this.color);
}
Component.onDestruction: {
print("dtor", this, this.color);
}
}
onObjectAdded: {
object.parent = window.contentItem;
}
}
MouseArea {
anchors.fill: parent
onClicked: {
generator.active = !generator.active;
}
}
}
qml: ctor QQuickRectangle(0x7fed5de5a300) #ff0000
qml: ctor QQuickRectangle(0x7fed5de5d540) #008000
qml: ctor QQuickRectangle(0x7fed5de5e3e0) #0000ff
qml: ctor QQuickRectangle(0x7fed5de5f280) #ffff00
qml: ctor QQuickRectangle(0x7fed5de60120) #800080
qml: dtor QQuickRectangle(0x7fed5de5a300) #ff0000
qml: dtor QQuickRectangle(0x7fed5de5d540) #008000
qml: dtor QQuickRectangle(0x7fed5de5e3e0) #0000ff
qml: dtor QQuickRectangle(0x7fed5de5f280) #ffff00
qml: dtor QQuickRectangle(0x7fed5de60120) #800080
プロパティーの説明
active: bool
true のときに delegate にコンポーネントが設定されていて status が Component.Ready ならばモデルに対してオブジェクトを生成する。false ならばオブジェクトは生成せず、生成オブジェクトがあれば破壊する。
asynchronous: bool
true ならば非同期にオブジェクトを生成する。
count: int
生成し抱えているオブジェクト数。
delegate: Component
オブジェクト生成に使われるコンポーネント。
生成オブジェクトには読込み専用プロパティー index に生成順が設定される。model が、整数、配列、文字列リスト、オブジェクトリストの場合には読込み専用プロパティー modelData に要素 (整数の場合には生成順) が設定される。
model: QVariant
以下のいずれかを設定する。整数を指定した場合にはその数分のオブジェクトが生成され、他の場合には各要素に対してオブジェクトが生成される。
- 整数
- 配列
- 文字列リスト
- オブジェクトリスト
- ObjectModel や ListModel、QAbstractItemModel 継承モデルなど
配列を設定した場合に model を参照すると配列への参照が返される。
配列を設定し、同じ配列を再設定した場合でもオブジェクトの削除と生成がされる。
object: QtObject
生成したオブジェクトがあれば 1 番目に生成したオブジェクトへの参照が設定される。オブジェクトをひとつしか生成しない場合にオブジェクトの参照を簡単にするために用意されている。
シグナルの説明
objectAdded(int index, QtObject object)
オブジェクトが追加されたときに送信されるシグナル。index は追加位置で object は追加されたオブジェクト。
objectRemoved(int index, QtObject object)
オブジェクトを削除しようとするときに送信されるシグナル。index は削除位置で object は削除しようとするオブジェクト。シグナルハンドラー onObjectRemoved() を抜けた直後にオブジェクトが削除される。
active を false にしたときには objectRemoved() の中では count は生成して抱えたオブジェクト数のままで、全オブジェクトの削除後に count が 0 になる。
active を false にしたときには objectRemoved() の中では count は生成して抱えたオブジェクト数のままで、全オブジェクトの削除後に count が 0 になる。
メソッドの説明
QtObject objectAt(int index)
index で指定した位置のオブジェクトへの参照を返す。
注意
model を参照したときの動作が Repeater の model とは異なっている。
参考情報
Instantiator QML Type
Repeater