请问:qml中,如何获取delegate中部件的属性值

MrEO 2017-07-25 11:32:27
实际情况要复杂一点,举个简单的例子,例子中如何才能获取到所有textfield中输入的内容?

ListView {
id: list
model:10
delegate: {
TextField {
id: textfield
}
}
}
function getAllText(){
//应该怎么做?
}
...全文
828 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
MrEO 2017-08-09
  • 打赏
  • 举报
回复
找到了一个itemAt方法,问题差不多解决了,也给其他同学一个参考 如果delegate中要获取的数据比较复杂,也可以在其中加一个function来return这个数据,然后getText中调用这个function就行了 Item itemAt(real x, real y),参数是部件在listview中的坐标位置,不知道为什么不能直接用index作为参数来获取该item,可能是因为listview的动态布局,会自动析构屏幕以外的部件(我猜的,不确定是不是这样),函数的官方文档http://doc.qt.io/qt-5/qml-qtquick-listview.html#itemAt-method

ListView {
    id: list
    model:10
    delegate: {
        TextField {
            id: textfield
        }
    }
}
function getAllText(){
    for(var i=0; i<listview.count; ++i)
		console.log(listview.itemAt(0, listview.delegate.height * i).text)
}
function getText(index){
	console.log(listview.itemAt(0, listview.delegate.height * index).text)
}
MrEO 2017-08-08
  • 打赏
  • 举报
回复
ListView {
    id: list
	property variant strlist: []
    model:10
    delegate: {
        TextField {
            id: textfield
			onEditingFinished: {
				var temp = strlist
				temp.push(textfield.text)
				strlist = temp
			}
        }
    }
}
感谢楼上两位的回答,我想到了用数组之类的,但是list<string>(好像)更改?variant的数组只有push而没有insert方法可以用,这样字符串的顺序又乱了。请问还有什么其他解决方法么
MrEO 2017-08-08
  • 打赏
  • 举报
回复

ListView {

}
引用 1 楼 D759378563 的回复:
list那里定义一个属性,里面textfield 的editfinished信号发出的时候把text set到list的属性里面,然后你的function那里访问list的属性就好了 list { property string text ... }
谢谢解答,但是有很多个textfield啊,连着填写几个的话最后得到的text不就是最后填写的那个了么? 我要实现的是多个textfield可以让用户填写信息,填写完成后点确定键调用可以获取到所有textfield,当然最好是getText(int index),然后再对这些字符串进行处理。
画茧自缚 2017-08-02
  • 打赏
  • 举报
回复
property string str: "" property string strAllText: "" ListView { anchors.centerIn: parent width: 400 height: 300 id: list model:10 delegate: TextField{ id: textFiled onEditingFinished: { str = textFiled.text getAllText() } } } function getAllText(){ //应该怎么做? strAllText = str console.log("strAllText is:", strAllText) }
jared2020 2017-08-01
  • 打赏
  • 举报
回复
list那里定义一个属性,里面textfield 的editfinished信号发出的时候把text set到list的属性里面,然后你的function那里访问list的属性就好了
list {
property string text
...

}

16,238

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧