2012-04-03 59 views
1

我有一个问题,我找不到解决方案,我希望你在这里找到它:我做了一个ListView与它的模型和它的委托等等,就像这样:从QML ListView中的TextEdit获取数据

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; 
    } 
} 

委托包括文本,文本编辑,等等....这样的事情:

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

回答

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); 
} 
+0

大,你非常有帮助,主要是因为我不知道Repeater类,我现在用的中继器。是否有一个与Repeater相同的ListView:positionViewAtIndex?我找不到它。顺便说一下,在PhotoViewer示例中,它们不使用Repeater,但使用ListView,即使它们不可见,项目也不会被销毁。 HMow他们能做到吗?再次感谢您的帮助 – Giammarco 2012-04-20 23:40:59

+0

@Giammarco如果您发现blakharaz的回答正确,请先接受他的回答;) – anticafe 2012-06-06 04:13:44