从qml中列表视图外部的文本字段在列表视图中的标签中设置文本
Set text in a label in a listview from a textfield outside listview in qml
我在 QML 中有以下 ListView:
ListView{
id:daylistView
width:parent.width
height:parent.height - eventDayLabel.height
boundsBehavior:Flickable.StopAtBounds
highlightRangeMode: ListView.StrictlyEnforceRange
orientation: Qt.Vertical
anchors.top:eventDateRow.bottom
clip:true
focus:true
model: 24
currentIndex : calendarMonth.selectedDate.getDate() === new Date().getDate()
&& calendarMonth.selectedDate.getMonth() === new Date().getMonth()?getHour():12
interactive: true
delegate: Item{
id:hourItem
property var hourTime:hourweeklistviewLabel
width: daylistView.width
height: 60
MouseArea{
anchors.fill:parent
onClicked:{
windowLoader.active =true
daylistView.currentIndex=index
}
}
Rectangle {
z:4
id:hourdaylistviewindexLine
y:getdayMinute()
width:hourItem.width
height:2
border.color: calendarMonth.selectedDate.getDate()===new Date().getDate()
&& getHour() === hourweeklistviewLabel.text
&& calendarMonth.selectedDate.getMonth() === new Date().getMonth()
?"red" : "transparent"
border.width:1
}
Rectangle {
z:4
id:hourline
anchors.verticalCenter: daylistView
width:daylistView.width
height:2
border.color: "lightgray"
border.width:1
}
Label{
z:4
id:hourweeklistviewLabel
anchors.verticalCenter: parent
text:['00','01','02','03',
'04','05','06','07','08','09','10','11','12','13',
'14','15','16','17','18','19','20','21','22','23'][index]
color: getHour() === hourweeklistviewLabel.text
&& calendarMonth.selectedDate.getDate() === new Date().getDate()
&& calendarMonth.selectedDate.getDay() === new Date().getDay()
? systemPalette.highlight : "lightgray"
}
Label{
z:4
id:notesLabel
anchors.left:hourweeklistviewLabel.right
//text:" "
}
}
}
}
这是一个日历应用程序,其中 ListView 代表每小时 time.The 代表包括一个鼠标区域,两个矩形和两个 labels.The 一个 Label 被读取 only.In 另一个 Label,我想从 ListView 外部的 TextInput 设置文本,从另一个 window.Far 更多 objective 是在特定时间显示标签,这意味着在 ListView.Until 的特定行中现在我管理获取 currentItem 小时,但我无法在 currentIndex 的 ListView 中的标签中设置文本,尽管我尝试了很多在 web.If 中找到的建议方法,但我找到了一种在 currenItem 标签中设置文本的方法然后我可以选择在 Listview 的任何其他索引中设置它。
正如@SoheilArmin 评论的那样,解决方案在于将 Label 文本绑定到 property.In ListView 代码:
delegate: Item{
id:hourItem
property var hourTime:hourweeklistviewLabel
**property var notetaking: notesLabel**
width: daylistView.width
height: 60
设置property var notetaking: notesLabel
.
然后在 TextField 中:
TextField {
id:title
x:50
y:20
placeholderText :'Enter Note'
text:daylistView.currentItem.notetaking.text
}
设置text:daylistView.currentItem.notetaking.text
因此,我们有一个双向绑定。
还定义一个按钮,以便可以将文本设置为标签:
Button {
id: button
text: qsTr("Add Note")
anchors.centerIn:parent
onClicked: {
if (title.text !==""){daylistView.currentItem.notetaking.text= title.text}
else{}
}
}
我在 QML 中有以下 ListView:
ListView{
id:daylistView
width:parent.width
height:parent.height - eventDayLabel.height
boundsBehavior:Flickable.StopAtBounds
highlightRangeMode: ListView.StrictlyEnforceRange
orientation: Qt.Vertical
anchors.top:eventDateRow.bottom
clip:true
focus:true
model: 24
currentIndex : calendarMonth.selectedDate.getDate() === new Date().getDate()
&& calendarMonth.selectedDate.getMonth() === new Date().getMonth()?getHour():12
interactive: true
delegate: Item{
id:hourItem
property var hourTime:hourweeklistviewLabel
width: daylistView.width
height: 60
MouseArea{
anchors.fill:parent
onClicked:{
windowLoader.active =true
daylistView.currentIndex=index
}
}
Rectangle {
z:4
id:hourdaylistviewindexLine
y:getdayMinute()
width:hourItem.width
height:2
border.color: calendarMonth.selectedDate.getDate()===new Date().getDate()
&& getHour() === hourweeklistviewLabel.text
&& calendarMonth.selectedDate.getMonth() === new Date().getMonth()
?"red" : "transparent"
border.width:1
}
Rectangle {
z:4
id:hourline
anchors.verticalCenter: daylistView
width:daylistView.width
height:2
border.color: "lightgray"
border.width:1
}
Label{
z:4
id:hourweeklistviewLabel
anchors.verticalCenter: parent
text:['00','01','02','03',
'04','05','06','07','08','09','10','11','12','13',
'14','15','16','17','18','19','20','21','22','23'][index]
color: getHour() === hourweeklistviewLabel.text
&& calendarMonth.selectedDate.getDate() === new Date().getDate()
&& calendarMonth.selectedDate.getDay() === new Date().getDay()
? systemPalette.highlight : "lightgray"
}
Label{
z:4
id:notesLabel
anchors.left:hourweeklistviewLabel.right
//text:" "
}
}
}
}
这是一个日历应用程序,其中 ListView 代表每小时 time.The 代表包括一个鼠标区域,两个矩形和两个 labels.The 一个 Label 被读取 only.In 另一个 Label,我想从 ListView 外部的 TextInput 设置文本,从另一个 window.Far 更多 objective 是在特定时间显示标签,这意味着在 ListView.Until 的特定行中现在我管理获取 currentItem 小时,但我无法在 currentIndex 的 ListView 中的标签中设置文本,尽管我尝试了很多在 web.If 中找到的建议方法,但我找到了一种在 currenItem 标签中设置文本的方法然后我可以选择在 Listview 的任何其他索引中设置它。
正如@SoheilArmin 评论的那样,解决方案在于将 Label 文本绑定到 property.In ListView 代码:
delegate: Item{
id:hourItem
property var hourTime:hourweeklistviewLabel
**property var notetaking: notesLabel**
width: daylistView.width
height: 60
设置property var notetaking: notesLabel
.
然后在 TextField 中:
TextField {
id:title
x:50
y:20
placeholderText :'Enter Note'
text:daylistView.currentItem.notetaking.text
}
设置text:daylistView.currentItem.notetaking.text
因此,我们有一个双向绑定。 还定义一个按钮,以便可以将文本设置为标签:
Button {
id: button
text: qsTr("Add Note")
anchors.centerIn:parent
onClicked: {
if (title.text !==""){daylistView.currentItem.notetaking.text= title.text}
else{}
}
}