ListView currentIndex strange behaviour



  • Hello.
    This is very confusing for me, I don't know why this is working the way it is.
    Let me explain.
    I have ApplicationWindow which contains ListView. I want ListView to be the size of its parent.

    import QtQuick.Controls 1.3
    import QtQuick 2.4
    import QtQuick.Layouts 1.1
    import QtQml.Models 2.1
    
    ApplicationWindow {
        width: 800
        height: 600
        visible: true
        id: window
    
        property alias cwidth: window.width
    
        ListView {
            id: listView
            orientation: ListView.Horizontal
            snapMode: ListView.SnapOneItem
            boundsBehavior: Flickable.StopAtBounds
            highlightMoveDuration: 250
            currentIndex: 1
    
            height: parent.height
    
            // Case #1
            width: parent.width
    
            // Case #2
    //                width: window.width
    
            // Case #3
    //                anchors.fill: parent
    
            model: ObjectModel {
                Page {
                    width: listView.width
                    height: listView.height
                    color: "yellow"
                    text: "Page1"
                }
    
                Page {
                    width: listView.width
                    height: listView.height
                    color: "cyan"
                    text: "Page2"
                }
    
                Page {
                    width: listView.width
                    height: listView.height
                    color: "magenta"
                    text: "Page3"
                }
            }
        }
    }
    
    //Page is simply a Rectangle with a Text
    import QtQuick 2.4
    
    Rectangle {
        smooth: true
        antialiasing: true
    
        property alias text: nameText.text
    
        Text {
            id: nameText
            anchors.centerIn: parent
            text: "PAGE 1"
            font.pointSize: 24
        }
    }
    

    I set listView.currentIndex to 1 so the first thing I am supposed to see, after I launch the application is Page2 with cyan color.

    There are 3 cases.

    • parent.width
    • window.width
    • anchors.fill: parent OR window

    When I set listView.width to parent.width and launch application, I see Page1 instead of Page2 - Not good.
    When I set listView.width to window.width and launch application, I see Page2 - Good.
    When I set anchors.fill to parent and launch application, I see Page1 instead of Page2 - Not good.

    When I print listView.currentIndex property, it says it has value 1(in each case), exactly what I assigned to it.

    Do you have any idea why this happens? I would be very grateful if someone could explain it to me.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.