1

我有一个问题,我找不到解决方案,希望你能在这里找到它:我用它的模型和它的委托等做了一个 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: ""
                    ....
                  }
           }
     .... 
    }
....
}

在同一个项目“creation”中,还有一个带有两个按钮的 ToolBar,如下所示:

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

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

4

1 回答 1

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);
}
于 2012-04-04T18:44:29.570 回答