On Sat, May 31, 2014 at 11:19 PM, Baldo Davide <baldos...@gmail.com> wrote:
> Hello, > > I'm having in issue with ListView.positionViewAtIndex(), i'm changing the > index with the last selection of the user in Component.onCompleted(), > but positionViewAtIndex() seems to behave randomly: sometime the listview > is moved correctly, sometime is off by 1 or 2 items. > I've been having this issue since 5.0 and i can still reproduce it on 5.3, > i spent several hours trying to debug it but without luck, in the end i > added a workaround: > > Timer { > > interval: 100 > > repeat: false > > running: true > > onTriggered: { > > main.alignIndex() > > } > > }. > but it's really a bad solution, and it's even visible. > > Is it wrong to call positionViewAtIndex() inside Component.onCompleted()? > If so, when should i call it? > > The component is a simple digit selector. > > --- CODE --- > > import QtQuick 2.0 > > > Rectangle { > > id: main > > width: 60 > > height: 180 > > color: "transparent" > > border.color: "black" > > border.width: 3 > > radius: 3 > > clip: true > > > property int initialDigit: 0; > > property int digit: 0; > > property string textColor: "violet"; > > > function alignIndex() > > { > > var newIndex = main.digit + 50 > > listView.positionViewAtIndex(newIndex,ListView.Center); > > } > > > /** workaround, force refresh after initialization **/ > > Timer { > > interval: 100 > > repeat: false > > running: true > > onTriggered: { > > main.alignIndex() > > } > > } > > > onDigitChanged: { > > if( main.digit >= 10 ) { > > main.digit = main.digit % 10 > > } > > main.alignIndex() > > } > > > Component.onCompleted: { > > for( var i = 0; i < 10; i +=1 ) > > { > > for( var n = 0; n < 10; n += 1 ) > > { > > listModel.append({ > > digit: n > > }) > > } > > } > > > //console.log("initial digit: "+initialDigit) > > digit = initialDigit > > alignIndex(); > > } > > > Timer { > > running: true > > repeat: false > > interval: 1 > > onTriggered: { > > main.alignIndex() > > } > > } > > > ListView { > > id: listView > > anchors.fill: parent > > > snapMode: ListView.SnapPosition > > > Rectangle { > > anchors.left: listView.left > > anchors.right: listView.right > > anchors.margins: 3 > > height: 60 * 0.8 > > y: main.height/2.0 - height/2.0 - 3 > > color: "#37ffffff" > > } > > > onMovementEnded: { > > main.digit = listView.indexAt( > > listView.contentX, > > listView.contentY + main.height/2.0 > > ) % 10 > > } > > > model: ListModel { > > id: listModel > > } > > > orientation: ListView.Vertical > > > delegate: Component > > { > > id: digitDelegate; > > Item > > { > > height: 60 > > width: main.width > > Text { > > id: digitText > > anchors.fill: parent > > text: digit > > font.pixelSize: parent.height * 0.8 > > verticalAlignment: Text.Center > > horizontalAlignment: Text.Center > > > Component.onCompleted: { > > digitText.color = main.textColor > > } > > } > > } > > } > > } > > } > > > > -- > Regards, > Davide Baldo > > _______________________________________________ > Development mailing list > Development@qt-project.org > http://lists.qt-project.org/mailman/listinfo/development > > You probably want to report this to the bug tracking system. https://bugreports.qt-project.org Aleix
_______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development