ListView B中的ListView A没有定义在使用loader qml加载的窗口中



我有一个垂直的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{}
}
}
}
}

我面临的问题是,ListViewdaylistView当我运行的应用程序没有在WindowinputWin内定义,所以我不能使用窗口中的代码(title.textdaylistView.currentItem.notetaking.text之间的双向绑定被打破,daylistView.currentIndex为空)。我试图将daylistView暴露为属性,但列表视图仍然没有被定义。如何使这个列表视图被定义?

谢谢。

这是有意义的,因为您正在创建daylistView的多个实例,因此不确定您想要哪个。

你可以在根委托中公开ListView作为属性,并通过ListView.currentItem使用它,因为你在dayCalendar上设置了currentIndexListView

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
}

相关内容

  • 没有找到相关文章

最新更新