I have a Vertical ListView
nested in a horizontal Listview
like below (it is generic code because the real code is too long and I wanted to give an idea of what I want to do ) :
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
There is also a loader that loads a window when I click inside MouseArea
inside the vertical 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{}
}
}
}
}
The problem I am facing is that ListView
daylistView
when I run the app is not defined inside the Window
inputWin
so I can not use the code in the window (bidirectional binding between title.text
and daylistView.currentItem.notetaking.text
is broken and daylistView.currentIndex
is null).
I tried to expose daylistView
as property but listview continues not to be defined.
How to make this listview be defined?
Thank you.
CodePudding user response:
This makes sense, because you are creating multiple instances of the daylistView
, so it is undefined which one you want.
You can however expose the ListView
as property in the root delegate and use it through ListView.currentItem
, given that you set currentIndex
on the dayCalendar
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
...
}
}
}
}
}
Inside the loaded qml:
TextField {
id:title
text: dayCalendar.currentItem.dayList.currentItem.notetaking.text
}