2017-04-19 100 views
0

如何获取QtQuick2 ScrollView的滚动位置?我试过scrollView.contentItem.yscrollView.viewport.y,但都是总是返回0。获取ScrollArea的滚动位置

我认为一个解决办法可能是将Flickable作为ScrollView的孩子。这会解决问题吗?对我来说,这是一个黑客,任何不是黑客的方式?

+1

你真的只需要轻弹。 – dtech

回答

0

你是对的,contentItem.x/y始终为0 但是你可以用contentItem.parent.x/y retrive你正在寻找从contentItem任父值(这不是ScrollViewFlickablecontentItemflickableItem)或从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' 
    } 
} 

由于帝特已经指出: 它可能会更好,直接使用Flickable。如果需要,您可以将ScrollBar s从新的QtQuick.Controls 2.x加到它。

我没有测量,但QTees吹嘘,新的QtQuick.Controls 2.x是表现最好的。顺便说一句,他们更容易使用和风格,但不支持本地外观和感觉。在这里,你将拥有属性contentX/Y

+1

你应该参考'flickableItem',参见我的答案[这里](http://stackoverflow.com/a/30378458/2538363)。 – BaCaRoZzo

+1

谢谢,补充一下。 – derM