0

如何从 ListView 的事件处理程序访问 ListView 委托中的 Text.text 项,示例代码(可能有语法错误)如下。

ListView {
    id: mainLView
    model: ListViewModel {}
    delegate: Rectangle {
      id: theRect
      Text {
         id: theText
         text: ""
      }
    }
    onMovementEnded {
      //here is where I would like to access the text in Text, e.g
      theText.text = "New Value"
    }
}

我的代码不起作用,因为无法从事件处理程序访问 theText。如何完成设置文本值?

编辑:为了完整起见:我可以通过java代码(在应用程序加载期间)将项目添加到ListView,通过代码访问事件内部ListView中的值aka

mainLView.model.append({'name': "First Value","city":"London"});
var myValue = model.get(currentIndex).city // or name

但我仍然找不到为委托 Text { text:""} 值分配值的方法。

编辑 2 7 月 10 日这是我想要实现的更完整的代码示例。

ListView {
    id: mainLView
    model: ListModel { id: mainModel}
    delegate: Rectangle {
      id: theRect
      Text {
         id: theText
         text: nameX
      }
    }
    Component.onCompleted: {
        for (var x=1; x < 99; x++) {
            var data = {'nameX': "Name: " + x, "numberX":x};
            mainModel.append(data);
        }
    }
    onMovementEnded {
        //here I want to set the value to numberX e.g (this does not work)
        theText.text = mainView.model.get(currentIndex).numberX
    } 
}
4

3 回答 3

2

ListView 有一个 currentItem 属性,您可以使用它来访问当前索引处的项目。要从委托中访问某些内容,您的委托需要在其顶级项目中具有一个属性,因为只有那些会暴露给外部。像这样的东西应该工作:

ListView {
    id: mainLView
    model: ListModel { id: mainModel}
    delegate: Rectangle {
      property alias text: theText.text
      Text {
         id: theText
         text: nameX
      }
    }

    onMovementEnded {
        mainLView.currentItem.text = "foo";
    } 
}
于 2013-07-10T18:26:45.940 回答
2

鉴于您的评论,我认为以下内容可能会满足您的要求。

delegate: Rectangle {
      id: theRect
      Text {
         id: theText
         text: mainLView.moving ? nameX : numberX
      }
    }

这应该在 ListView 移动时显示其中一个值,而在不移动时显示另一个值。

于 2013-07-10T19:29:36.370 回答
0

将字符串值分配给列表视图委托中的文本(文本元素)。您可以使用模型的属性名称。

喜欢以下。这里的名字来自 Jason 对象 {'name': "First Value","city":"London"});

 delegate: Rectangle {
      id: theRect
      Text {
         id: theText
         text: name // or city
      }
    }

查看此链接(http://kunalmaemo.blogspot.kr/2011/03/creating-custom-listview-delegate-in.html)它会有所帮助。

顺便说一句,要从委托中获取文本,您需要从模型中获取它,您不能从委托中获取它,因为委托是列表视图中的可重用元素,并且它的值不断变化。

于 2013-07-10T00:22:42.700 回答