{Новое в Qml (быстрое 2.0 с использованием бета-версии Qt 5.1) и обучение}.
Я хотел знать, возможна ли такая идиома в Qml: ниже у меня есть объект objLeftColumn, который ожидает, что его дочерние элементы предоставят логическое значение m_bIsSelected и псевдоним MouseArea m_mouseProperty и использует их, чтобы сделать коллекцию таких дочерних элементов взаимоисключающими, т. Е. Только одним из них могут быть в выбранном состоянии. Следующее работает нормально, но мне нужно повторять его каждый раз, когда я хочу, особенно если я хотел это для Row и т. Д.
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-файле), который мог бы упорядочить данные элементы в столбце, в то же время имея дело с эксклюзивностью их выбора?
Идея состоит в том, чтобы вместо того, чтобы сразу же передать компонент делегату, я дам его позже, и для каждого экземпляра компонента (в зависимости от числового значения модели выше и ниже) делегат: в Repeater должен вести себя аналогичным образом.
например, в псевдониме:
в 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 является более общим и может вызываться с любым Item, назначенным его делегату, и будет вести себя аналогичным образом. Возможно ли это в qml