{Qml 新手(使用 Qt 5.1 beta 的快速 2.0)和学习}。
我想知道在 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 文件中),它可以在 Column 中排列给定的项目,同时处理它们的选择的排他性吗?
这个想法不是将组件直接提供给委托,而是稍后将其提供给组件,并且对于组件的每个实例化(取决于上面和下面的模型的数值),委托:在中继器中的行为应该类似。
例如,在伪代码中:
在 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中可能吗