{Qml の初心者 (Qt 5.1 ベータ版を使用したクイック 2.0) と学習}。
そのようなイディオムが Qml で可能かどうか知りたかった: 以下に objLeftColumn があります。これは、その子がブール値の m_bIsSelected と MouseArea エイリアス m_mouseProperty を公開することを期待し、それらを使用して、そのような子のコレクションを相互に排他的にします。つまり、1 つだけです。それらのうち、選択状態にすることができます。フォローインは正常に機能しますが、必要なたびに、特に行などで必要な場合は繰り返す必要があります.
Column {
id: objLeftColumn
property int m_iLastButtonClicked: -1
property int m_iCurrentButtonClicked: -1
onM_iCurrentButtonClickedChanged: {
if(m_iLastButtonClicked != -1) {
objLeftColumn.children[m_iLastButtonClicked].m_bIsSelected = false
}
m_iLastButtonClicked = m_iCurrentButtonClicked
}
Repeater {
id: objLeftColumnRepeater
model: 5
delegate: ABCD {
id: objABCD
m_mouseProperty.onClicked: {
if(m_bIsSelected) {
objLeftColumn.m_iCurrentButtonClicked = index
}
else {
objLeftColumn.m_iLastButtonClicked = -1
objLeftColumn.m_iCurrentButtonClicked = -1
}
}
}
}
}
指定された項目を列に配置しながら、選択範囲の排他性を処理できる汎用の objLeftColumn (別の qml ファイル) を作成できますか?
コンポーネントをその場でデリゲートに渡すのではなく、後でコンポーネントをインスタンス化するたびに (上下のモデルの数値に応じて) デリゲートを渡します。
たとえば、疑似コードでは次のようになります。
Exclusive.qml で:
Column {
id: objLeftColumn
property int m_iLastButtonClicked: -1
property int m_iCurrentButtonClicked: -1
property alias m_delegate: objLeftColumnRepeater.delegate
onM_iCurrentButtonClickedChanged: {
if(m_iLastButtonClicked != -1) {
objLeftColumn.children[m_iLastButtonClicked].m_bIsSelected = false
}
m_iLastButtonClicked = m_iCurrentButtonClicked
}
Repeater {
id: objLeftColumnRepeater
model: 5
onItemAdded: {
//state of item can be manipulated but want to
//add behaviour to the item eg:
/*item {
m_mouseProperty.onClicked: {
//do something
}
}*/
}
}
}
SomeOther.qml で:
Exclusive {
model: 5
delegate: ABCD
}
Exclusive {
model: 9
delegate: DEFG
}
など..したがって、このように Column in Exclusive はより一般的であり、そのデリゲートに割り当てられた任意のアイテムで呼び出すことができ、同様に動作します。これはqmlで可能ですか