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.textdaylistView.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
}