如何通过Javascript访问QML组合框中使用的QAbstractListModel的角色
我有一个基于如何通过Javascript访问QML组合框中使用的QAbstractListModel的角色,javascript,qt,combobox,qml,qt5.4,Javascript,Qt,Combobox,Qml,Qt5.4,我有一个基于QAbstractListModel的模型 import QtQuick 2.4 import QtQuick.Controls 1.3 ComboBox { id: dropDownList model: myModel textRole: "display" onActivated: { console.log("dropDownList Activated"); var currentItem = delegat
QAbstractListModel
的模型
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,为几个不同的角色读取项目
的值,并使用它们做有用的工作
然而,我找不到任何方法来做到这一点。示例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);
}
}
我得到的控制台日志是:
显示
角色值由组合框
本身正确显示
我还尝试了模型[index].display
,这会
TypeError:无法读取未定义的属性“display”
QAbstractListModel
不支持model.get(index)
,并且没有该角色,因此不适合使用
我相信这是可能的,因为
组合框可以显示任意角色的文本。您可以使用QuickControls 2组合框delegateModel的undocumented属性
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属性
尽管未记录此属性,但在设置用于自定义弹出窗口的模型时,示例中提到了此属性
contentItem: ListView {
clip: true
implicitHeight: contentHeight
model: control.popup.visible ? control.delegateModel : null
currentIndex: control.highlightedIndex
ScrollIndicator.vertical: ScrollIndicator { }
}
我打赌myModel
是一个上下文属性,不是吗?如果是这样,用Q_INVOKABLE
/SLOT
方法包装数据
并收集所需角色如何?BaCaRoZzo是正确的。您需要向模型中添加可调用的方法以直接访问它。不幸的是,组合框
,没有向您公开模型:(