如何通过Javascript访问QML ComboBox中使用的QAbstractListModel的角色

How to access Roles of a QAbstractListModel used in a QML ComboBox via Javascript

本文关键字:QAbstractListModel 角色 ComboBox 何通过 Javascript 访问 QML      更新时间:2023-09-26

我有一个基于QAbstractListModel的模型。

它实现几个不同的角色来提供各种数据片段。

我已经在ComboBox内设置了modeltextRole。这完全有效。

当用户从这个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 { }
}
相关文章:
  • 没有找到相关文章