如何通过Javascript访问QML ComboBox中使用的QAbstractListModel的角色
How to access Roles of a QAbstractListModel used in a QML ComboBox via Javascript
我有一个基于QAbstractListModel
的模型。
它实现几个不同的角色来提供各种数据片段。
我已经在ComboBox
内设置了model
和textRole
。这完全有效。
当用户从这个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
可以显示来自任意角色的文本。
您可以使用
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对象,而不是QtObjects,因此您不能在绑定中使用delegateModel.items.get()
返回的对象,因为它没有Qml属性。
尽管此属性未记录在设置用于自定义弹出窗口的模型时,自定义组合框示例中提到了此属性。
contentItem: ListView {
clip: true
implicitHeight: contentHeight
model: control.popup.visible ? control.delegateModel : null
currentIndex: control.highlightedIndex
ScrollIndicator.vertical: ScrollIndicator { }
}
相关文章:
- 没有找到相关文章