如何访问QML listview的委托中的数据?

时间:2019-01-20 19:41:12

标签: qt qml

如何获取列表视图中的数据。我有一个QML列表视图,该视图在delagate内部有一个Textfield。我应该如何在listview的delagate内部的textfield中调用文本?

    ListView {
        id:listview
        model: 10
        delegate: Component{
           id:component

           Item{
              id:item

              Textfield{
                  id:textfield
              }
        }
    }

    Button{
        onClicked:{

           for(var i=0 ; i<listview.model; i++){
                myfunc(     )    <---- textfield at index i text to be put here
           }
        }
    }

按下按钮后,我想在列表视图的特定索引或示例代码中的所有文本字段中获取数据。

1 个答案:

答案 0 :(得分:1)

您的方法不正确,您必须通过模型访问数据,但是您的模型是只读的,也就是说,它将永远不会被修改,而必须使用ListModel或QAbstractItemModel。

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    ListModel{
        id: mymodel
        Component.onCompleted: {
            for(var i=0; i< 10; ++i){
                mymodel.append({"text": ""})
            }
        }
    }
    ListView {
        id:listview
        height: contentHeight
        model: mymodel
        delegate: TextField{
            id:textfield
            onTextChanged: model.text = text
        }
    }
    Button{
        text: "Press me"
        anchors.top: listview.bottom
        onClicked:{
            for(var i=0 ; i<mymodel.count; i++){
                console.log(mymodel.get(i).text)  // <---- textfield at index i text to be put here
            }
        }
    }
}