我有一个垂直的ListView
嵌套在一个水平的Listview
如下(这是通用代码,因为真正的代码太长,我想给一个想法,我想做什么):
ApplicationWindow{
id:appwindow
............
Item{
id:dayView
...........
ListView{
id:dayCalendar
orientation: Qt.Horizontal
model:31
delegate: Item{
...............
ListView{
id:daylistView
orientation: Qt.Vertical
model:24
delegate:Item{
id:hourItem
property string hourTime:hourweeklistviewLabel
property string notetaking:notesLabe
.............
MouseArea{
anchors.fill:parent
onClicked:{
windowLoader.active =true
daylistView.currentIndex=index
}
}
Rectangle{}
Label{
id:hourweeklistviewLabel
}
Label{
id:notesLabel
anchors.left:hourweeklistviewLabel.right
anchors.leftMargin: 30
text:""
}//Label
}//delegate:Item
}//ListView
} //delegate:Item
}//ListView
}//Item
还有一个加载器,加载一个窗口,当我点击里面的MouseArea
垂直ListView:
Loader {
id:windowLoader
focus: true
active:false
sourceComponent: Window{
id:inputWin
title:"Enter Note"
width:500
height:300
visible:true
onClosing:{
windowLoader.active=false
daylistView.currentIndex = calendarMonth.selectedDate.getDate() === new Date().getDate()
&& calendarMonth.selectedDate.getMonth() === new Date().getMonth()?getHour():12
}
TextField {
id:title
x:50
y:20
placeholderText :'Enter Note'
text:daylistView.currentItem.notetaking.text
}
TextField{
id:timeDate
anchors.horizontalCenter: title.horizontalCenter
anchors.top:title.bottom
anchors.topMargin:10
placeholderText : calendarMonth.selectedDate.getDate() +"-"
+ (calendarMonth.selectedDate.getMonth()+1)+"-"
+ calendarMonth.selectedDate.getFullYear() + " "
+ daylistView.currentItem.hourTime.text +":00"
}
Button {
id: button
text: qsTr("Add Note")
anchors.centerIn:parent
onClicked: {
if (title.text !==""){daylistView.currentItem.notetaking.text= title.text}
else{}
}
}
}
}
我面临的问题是,ListView
daylistView
当我运行的应用程序没有在Window
inputWin
内定义,所以我不能使用窗口中的代码(title.text
和daylistView.currentItem.notetaking.text
之间的双向绑定被打破,daylistView.currentIndex
为空)。我试图将daylistView
暴露为属性,但列表视图仍然没有被定义。如何使这个列表视图被定义?
谢谢。
这是有意义的,因为您正在创建daylistView
的多个实例,因此不确定您想要哪个。
你可以在根委托中公开ListView
作为属性,并通过ListView.currentItem
使用它,因为你在dayCalendar
上设置了currentIndex
ListView
ListView{
id: dayCalendar
delegate: Item {
id: calDelegate
property int calIndex: index
property var dayList: daylistView
ListView {
id: daylistView
delegate: Item {
MouseArea {
onClicked: {
dayCalendar.currentIndex = calDelegate.calIndex
daylistView.currentIndex = index
...
}
}
}
}
}
加载的qml:
TextField {
id:title
text: dayCalendar.currentItem.dayList.currentItem.notetaking.text
}