ListView B 中的 ListView A 未在使用加载程序 qml 加载的 window 中定义
ListView A inside ListView B is not defined in a window that loads with 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
当我在垂直 ListView 中的 MouseArea
内单击时,还有一个加载器加载 window:
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
中定义时,所以我不能使用 window 中的代码(title.text
和 daylistView.currentItem.notetaking.text
之间的双向绑定被破坏并且 daylistView.currentIndex
为空)。
我试图将 daylistView
公开为 属性 但列表视图仍未定义。
如何定义这个listview?
谢谢。
这是有道理的,因为您正在创建 daylistView
的多个实例,所以您想要哪一个是不确定的。
不过,您可以在根委托中将 ListView
公开为 属性,并通过 ListView.currentItem
使用它,前提是您在 [=16= 上设置了 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
}
我有一个垂直 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
当我在垂直 ListView 中的 MouseArea
内单击时,还有一个加载器加载 window:
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
中定义时,所以我不能使用 window 中的代码(title.text
和 daylistView.currentItem.notetaking.text
之间的双向绑定被破坏并且 daylistView.currentIndex
为空)。
我试图将 daylistView
公开为 属性 但列表视图仍未定义。
如何定义这个listview?
谢谢。
这是有道理的,因为您正在创建 daylistView
的多个实例,所以您想要哪一个是不确定的。
不过,您可以在根委托中将 ListView
公开为 属性,并通过 ListView.currentItem
使用它,前提是您在 [=16= 上设置了 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
}