我有一个基于QAbstractListModel
的模型。
它实现了几种不同的角色来提供各种数据。
我已在model
内设置了textRole
以及ComboBox
。这非常有效。
当用户从此ComboBox
中选择一个项目(行)时,我需要运行一些Javascript来读取几个不同角色的Item
个值并使用它们来执行有用的操作工作
但是,我找不到任何办法。示例ComboBox
QML:
import QtQuick 2.4
import QtQuick.Controls 1.3
ComboBox {
id: dropDownList
model: myModel
textRole: "display"
onActivated: {
console.log("dropDownList Activated");
console.log("Read Model Value: " + model.display);
}
}
我得到的控制台日志是:
qml: dropDownList Select Activated qml: Read Model Value: undefined
display
角色值由ComboBox
本身正确显示。
我也试过了model[index].display
,这给了
TypeError: Cannot read property 'display' of undefined
model.get(index)
不支持 QAbstractListModel
,并且没有该角色,因此不适合。
我相信这一定是可能的,因为ComboBox
可以显示来自任意角色的文本。
答案 0 :(得分:1)
您可以使用QuickControls 2 ComboBox delegateModel
的未记录属性。
import QtQuick 2.4
import QtQuick.Controls 1.3
ComboBox {
id: dropDownList
model: myModel
textRole: "display"
onActivated: {
console.log("dropDownList Activated");
var currentItem = delegateModel.items.get(currentIndex)
console.log("Read Model Value: " + currentItem.model.display);
}
}
返回的项目是JavaScript对象,而不是QtObject,因此您无法在绑定中使用delegateModel.items.get()
返回的对象,因为它没有Qml属性。
尽管未记录此属性,但在Customizing ComboBox示例中提到了设置用于自定义弹出窗口的模型时所提到的问题。
contentItem: ListView {
clip: true
implicitHeight: contentHeight
model: control.popup.visible ? control.delegateModel : null
currentIndex: control.highlightedIndex
ScrollIndicator.vertical: ScrollIndicator { }
}