Quantcast
Channel: Active questions tagged listview - Stack Overflow
Viewing all articles
Browse latest Browse all 611

How to determine the scroll position of a ListView in a ScrollView

$
0
0

I have a QML application with a ScrollView and a ListView inside. The items from the ListView have variable heights.

I need to know when the scroll bar is moved, in fact, when it is at the bottom and when it is not. My target is to keep the scroll bar at the bottom (positionViewAtEnd()) when I add an item to the ListView only if the scroll is at the bottom. If not at the bottom, positionViewAtEnd() will not be used.

I have tried "playing" with the height, contentHeight, and contentY. Sometimes it works (when scroll is at bottom: contentHeight == contentY + height), but other times, contentY value changes to negative values, and my code fails.

How do I achieve this?


I have tried with atYEnd in several property changes, to detect if the scroll bar is at the bottom or not.

It seems to work, and then I use that in onCountChanged to put (or not) the scroll bar at the bottom.

That works once all the ListView height is full of messages, but not in one case: when the incoming message is the one that fills the ListView height (1st time that contentY is not0).

I have simplified my code to test (including the delegate):

FocusScope {    clip: true    id: focusScopeView    width: parent.width; height: parent.height    ScrollView {        width: parent.width; height: parent.height        ListView {            id: listTexts            width: parent.width; height: parent.height            property bool bScrolled: false            model: textsModel            delegate: Text { text: "Contact:\t" + eventText }            onCountChanged: {                if (!bScrolled)                     positionViewAtEnd();            }            onContentYChanged: {                bScrolled = !atYEnd;                if (atYEnd)                    positionViewAtEnd()            }            onContentHeightChanged: {                if (!bScrolled)                     positionViewAtEnd();            }        }    }}

Viewing all articles
Browse latest Browse all 611

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>