Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Javascript访问QML组合框中使用的QAbstractListModel的角色_Javascript_Qt_Combobox_Qml_Qt5.4 - Fatal编程技术网

如何通过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是正确的。您需要向模型中添加可调用的方法以直接访问它。不幸的是,
组合框
,没有向您公开模型:(