2017-04-19 104 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