获取 ScrollArea 的滚动位置

Get scroll position of ScrollArea

如何获取 QtQuick2 的滚动位置 ScrollView?我尝试了 scrollView.contentItem.yscrollView.viewport.y,但两者都是 return 0。

我认为一种解决方案可能是将 Flickable 作为 ScrollView 的 child。那能解决问题吗?对我来说这也是黑客攻击,但无论如何这不是黑客攻击?

你是对的,contentItem.x/y总是0。 但是,您可以从 contentItem 的父级(不是 ScrollView 而是 FlickablecontentItemflickableItem) 与 contentItem.parent.x/y 或来自 flickableItemflickableItem.contentX/Y。两者的关系是:flickableItem.contentX === -flickableItem.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 可能会更好。如果需要,您可以将 ScrollBars 从新 QtQuick.Controls 2.x 附加到它。

我没有测量数据,但 QTees 吹嘘说新的 QtQuick.Controls 2.x 性能更优越。顺便说一下,它们更易于使用和设计风格,但不支持原生外观和感觉。在这里你将拥有属性 contentX/Y