从QML ListView中的TextEdit获取数据

时间:2012-04-03 23:25:06

标签: listview qml textedit

我遇到了问题我无法找到它的解决方案,我希望你能在这里找到它:我做了一个ListView及其模型及其委托等等,如下所示:

Item {
id: creation;   width: parent.width ; height: parent.height
.....
ListView {
        id: mainViewLiist
        model: CreationModel {id: modelCreation}
        delegate: delegateCreation
        width: parent.width; height: parent.height;  x: -(screen.width * 1.5);
        cacheBuffer: 100;
    }
}

委托包括Text,TextEdit等......这样的事情:

Component {
id: creationDelegate
Item {
    id: itemCreate
   ....
     Row {
                id: rowSerie
                spacing: 5
                Text {
                    id: seriesLabel
                    text: "Series:"
                    ....
                }

                TextEdit {
                    id: seriesTextEdit
                    text: ""
                    ....
                  }
           }
     .... 
    }
....
}

在同一个项目“创造”中,还有一个带有两个按钮的工具栏,如下所示:

ToolBar { id: toolBarCreation; height: 40;
    width: parent.width;
    opacity: 1.0
    button1Label: "Back"
    button2Label: "Create"
    onButton1Clicked:
    {
      ...
    }
    onButton2Clicked:
    {
        ...
    }
  }

我想要的是:当我点击第二个按钮“创建”时,我想简单地用console.log(arg1,...)显示每个项目的TextEdit中写的名为“seriesTextEdit”的内容在listView中。例如,如果我的列表视图包含10个项目,并且用户在所有项目的所有TexTedit中插入了一个值,那么我该如何访问这些数据? 非常感谢你, Giammarco

1 个答案:

答案 0 :(得分:6)

ListView可能是错误的类,因为它会销毁不在可见区域中的项目并创建可见的新项目。如果您不希望使用中继器。

无论如何,您可以使用ListView.contentItem.children访问ListView的子项。我试过,它包含一个额外的元素(可能是标题)。

我建议在列表项委托的根目录中为TextEdit文本(在我的示例中为seriesName)设置别名属性。可能你需要索引相同,因为如上所述,ListView可能不包含所有模型项的元素。 然后你可以使用循环来获取文本。

print(mainViewLiist.contentItem.children.length);
for (var i = 0, l = mainViewLiist.contentItem.children.length; i < l; i++) {
    var child = mainViewLiist.contentItem.children[i];
    print(i, ": ", child, "=", child.text);
}