Qt 获取滚动区域的滚动位置

Qt 获取滚动区域的滚动位置,qt,scroll,qml,qtquick2,Qt,Scroll,Qml,Qtquick2,如何获取QtQuick2的滚动位置ScrollView?我尝试了scrollView.contentItem.y和scrollView.viewport.y,但两者都始终返回0 我认为一个解决方案可能是将Flickable作为ScrollView的子对象。这能解决问题吗?对我来说,这也是一种黑客行为,不管怎样,这都不是黑客行为?你是对的,contentItem.x/y总是0。 但是,您可以从contentItem的父项(它不是ScrollView,而是Flickable的contentItem中

如何获取QtQuick2的滚动位置
ScrollView
?我尝试了
scrollView.contentItem.y
scrollView.viewport.y
,但两者都始终返回0


我认为一个解决方案可能是将
Flickable
作为
ScrollView
的子对象。这能解决问题吗?对我来说,这也是一种黑客行为,不管怎样,这都不是黑客行为?

你是对的,
contentItem.x/y
总是0。 但是,您可以从
contentItem
的父项(它不是
ScrollView
,而是
Flickable
contentItem
中的
使用
contentItem.parent.x/y
或使用
flickableItem.contentX/y
flickableItem
。两者之间的关系是:
flickableem.contentX===-flickableem.contentItem.x

import QtQuick 2.0
import QtQuick.Controls 1.4

ApplicationWindow {
    id: root
    visible: true
    width: 400; height: 450

    ScrollView {
        id: sv
        anchors.fill: parent
        contentItem: Rectangle {
            id: rect
            width: 800
            height: 800
            gradient: Gradient {
                GradientStop { position: 0; color: 'grey' }
                GradientStop { position: 1; color: 'red' }
            }
        }
    }

    Text {
        anchors.centerIn: parent
        text: sv.contentItem.parent.x + ' / ' + sv.contentItem.parent.y + '\n'
              + sv.flickableItem.contentX  + ' / ' + sv.flickableItem.contentY + '\n'
              + sv.flickableItem.contentItem.x  + ' / ' + sv.flickableItem.contentItem.y + '\n'
              + sv.flickableItem.contentItem + '\t' + sv.contentItem.parent // Just to suport my claim, both are the same
        color: 'white'
    }
}
正如dtech已经指出的那样: 最好直接使用
Flickable
。如果需要,您可以从新的
QtQuick.Controls 2.x
将s附加到它


我没有测量数据,但QTEE们吹嘘说,新的
QtQuick.Controls 2.x
性能优越。顺便说一句,它们更易于使用和设计,但不支持本地的外观和感觉。这里有属性
contentX/Y

您实际上只需要flickable。您应该参考
flickableItem
,例如,请参阅我的答案。