aknew
aknew

Reputation: 1121

qt quick call index of listview from nested listview

I have listview with a nested listview in it in qml, how can i get index of parent listview index in nested listview delegate?

Code sample:

ListView {
        id: listView
        anchors.fill: parent
        delegate: delegate
        model: myModel
    }

    Component {
        id: delegate
        Item {
            id: recipe
            width: listView.width
            height: 120


            Column {

                   // some text fields
                    ListView {
                        id: listView1
                        width: listView.width
                        height: 50
                        delegate: nextLevelDelegate
                        model: nextLevelList
                    }

                }
        }
    }

    Component {
        id: nextLevelDelegate
        Item{
                                        width: listView1.width
                                        height: 20
                                        Rectangle {
                                            id: background2
                                            x: 2; y: 2; width: parent.width - x*2; height: parent.height - y*2
                                            color: "lightgray"
                                            border.color: "gray"
                                            radius: 5
                                        }
                                        Text {
                                            anchors.fill: parent
                                            id:nextLevelButton
                                            horizontalAlignment:Text.AlignHCenter
                                            text: modelData
                                        }
                                        MouseArea
                                        {
                                          anchors.fill: parent
                                          id: mouseArea
                                          onClicked: {
                                             window.buttonPressed(nextLevelButton.text,listView.currentIndex);//I need parent index here for calling c++ method with it
                                          }
                                        }
                                    }

    }

Upvotes: 2

Views: 938

Answers (2)

Pj Toopmuch
Pj Toopmuch

Reputation: 147

This worked for me:

import QtQuick 2.15
import QtQuick.Window 2.15

Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")

ListModel {
    id: listModelOne
    ListElement {vertical: 8}
    ListElement {vertical: 9}
}
ListModel {
    id: listModelTwo
    ListElement {horiz: 0}
    ListElement {horiz: 1}
}
ListView{
    id:verticalListView
    anchors.fill:parent
    model:listModelOne

    delegate: Item{
        id:vert_del
        width: 200
        height: 100
        ListView{
            property int parentIndex: index
            id:horizontalListView
            width:verticalListView.width
            height:100
            orientation: ListView.Horizontal
            model:listModelTwo
            delegate: Item{
                width:50
                height:50
            Text{
                text:horiz
                MouseArea{
                anchors.fill:parent
                    onClicked: console.debug(horizontalListView.parentIndex)
                }
            }
            }
        }
    }
}
}

Upvotes: 0

sebasgo
sebasgo

Reputation: 3851

Assign the index of the parent list view to a different property so it won't be shadowed.

ListView {
   id: listView1
   property int parentIndex: index
   width: listView.width
   height: 50
   delegate: nextLevelDelegate
   model: nextLevelList

}

parentIndex will be available within nextLevelDelegate as listView1.parentIndex.

Upvotes: 4

Related Questions