从QML ListView中的TextEdit获取数据

Gia*_*rco 1 listview textedit qml

我有一个问题,我找不到它的解决方案,我希望你在这里找到它:我做了一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

                TextEdit {
                    id: seriesTextEdit
                    text: ""
                    ....
                  }
           }
     .... 
    }
....
}
Run Code Online (Sandbox Code Playgroud)

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

ToolBar { id: toolBarCreation; height: 40;
    width: parent.width;
    opacity: 1.0
    button1Label: "Back"
    button2Label: "Create"
    onButton1Clicked:
    {
      ...
    }
    onButton2Clicked:
    {
        ...
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

bla*_*raz 6

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

无论如何,您可以使用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);
}
Run Code Online (Sandbox Code Playgroud)