Ubuntu qml如何从数据模型中填充列表项

时间:2014-10-25 19:05:49

标签: ubuntu sdk qml

我正在尝试使用Ubuntu SDK实现药物页面。 我正在尝试从SQL Lite数据库中获取数据并在加载页面时填充列表。 如果我使用带有文本和按钮的Row,我可以这样做,但如果我尝试使用ListItem则不行。

这有效:

page: Page {
    id: drugPage
    Component.onCompleted: {
        var d = Drugs.getDrugs();
        Drugs.fillDrugList(d);
    }
    Column {
        id: lstDrugs
        anchors {
            top: parent.top
            left: parent.left
            right: parent.right
            bottom: parent.bottom
            margins: units.gu(2)
        }
        spacing: units.gu(2)

        ListModel {
            id: mdlDrugs
        }
        Component {
             id: delDrugs
             Row {
                 spacing: units.gu(6)
                 //width: parent.width
                 Text {
                     id: txtDrug
                     text: name
                 }
                 Text {
                     id: txtDose
                     text: dose
                     //width: units.gu(4)
                 }
                 Text {
                     id: txFrequency
                     text: frequency
                 }
            }
        }

        ListView {
            id: viewDrugs
            model: mdlDrugs
            delegate: delDrugs
            height: parent.height
            width: parent.width
        }
    }
}

但这不起作用:

page: Page {
    id: drugPage
    Component.onCompleted: {
        var d = Drugs.getDrugs();
        Drugs.fillDrugList(d);
    }
    Column {
        id: lstDrugs
        anchors {
            top: parent.top
            left: parent.left
            right: parent.right
            bottom: parent.bottom
            margins: units.gu(2)
        }
        spacing: units.gu(2)

        ListModel {
            id: mdlDrugs
        }
        ListItem.Subtitled {
            id: delDrugs
            visible: true
            width: parent.width
            height: units.gu(5)
            text: "Drug:" + name + " " + dose
            subText: "Frequency: " + frequency
        }

        ListView {
            id: viewDrugs
            model: mdlDrugs
            delegate: delDrugs
            height: parent.height
            width: parent.width
        }
    }
}

列表项目存在于ui中,但未填充数据。

我得到的错误是: ReferenceError:未定义名称 ReferenceError:未定义频率 我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

我在QML文档中找到了答案: http://developer.ubuntu.com/api/qml/sdk-14.04/QtQml.ListModel/ 诀窍是将ListItem包装在Repeater中,就像这样。 ListView不是必需的。

        ListModel {
            id: mdlDrugs
        }
        Repeater {
            model: mdlDrugs
            ListItem.Subtitled {
                text: "Drug:" + name + " " + dose
                subText: "Frequency: " + frequency
            }
        }