2016-09-19 30 views
1

我想在QML ScrollView的滾動結束時做些什麼。從文檔我假設flickableItem.onMovementEnded是我正在尋找,但我從來沒有得到這個信號。我對「運動」的理解錯了嗎? 我寫了這個最小的QML應用程序,並且我的console.log從未被調用過。我使用Qt 5.7或5.5.1在Mac上運行。如何訪問QML ScrollView的移動已結束?

import QtQuick 2.5 
import QtQuick.Controls 1.4 

ApplicationWindow { 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr("Hello World") 

    ScrollView { 
     id: scrollView 

     anchors.fill: parent 

     flickableItem.onMovementEnded: { 
      console.log("onMovementEnded") 
     } 

     Rectangle { 
      id: rect 

      width: 3000 
      height: 3000 
     } 
    } 

} 

我也嘗試通過「連接」連接它,但沒有運氣。

Connections { 
    target: scrollView.flickableItem 
    onMovementEnded: { 
     console.log("onMovementEnded") 
    } 
} 

回答

0

基於@ ddriver的輸入,我使用onContentYChanged和一個Timer構建解決方案。即使它不完美,這對我來說已經足夠了。

import QtQuick 2.5 
import QtQuick.Controls 1.4 

ApplicationWindow { 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr("Hello World") 

    ScrollView { 
     id: scrollView 

     anchors.fill: parent 

     flickableItem.onContentXChanged: { 
      updateContentDelay.restart() 
     } 

     flickableItem.onContentYChanged: { 
      updateContentDelay.restart() 
     } 

     Rectangle { 
      id: rect 

      width: 3000 
      height: 3000 
     } 
    } 

    Timer { 
     id: updateContentDelay 
     interval: 200 
     repeat: false 

     onTriggered: { 
      console.log("do something") 
     } 
    } 

} 
2

從文檔:

甲滾動型既可以用於替換Flickable或裝飾一個 現有Flickable。

...

flickableItem:項目

的滾動型的flickableItem。如果contentItem提供給 ScrollView是一個Flickable,它將是contentItem。

聲音對我說,如果滾動視圖結合使用與FlickableflickableItem屬性將僅填充。而在你的代碼中它不是。

編輯:調查過了一會兒,我發現,該場所存在,即使你不使用Flickable,但信號會只有如果你有ScrollView內的實際Flickable發出,它會當您從上到下或使用鼠標滾輪一路快速滾動時,只會發出,輕彈不會這樣做,使用滾動條不會這樣做。不理想,一種越野車...

似乎你真正想要的只是使用Flickable並手動將滾動條放在它上面,有很多示例如何做到這一點。然後它會在停止時發出。

+0

感謝您輸入@ddriver。是的,它看起來像一個錯誤。我沒有按照你寫的那樣交換Flickable,而是試着從上到下快速滾動,反之亦然,只有當滾動視圖結束拍攝並彈回時,我才能看到'onMovementEnded'事件。 – philipp

+1

是的,只有當它超調時,這意味着實際的滾動不會真正影響可滑動,直到滾動條到達結尾,並且只有超調到達它。正如我在使用QML方面的經驗中的許多事情一樣 - 您必須自己動手才能滿足您的需求。庫存QML組件在狹隘的預期用途之外幾乎沒有用處。 – dtech