2016-09-19 5 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とタイマーを使用してソリューションを構築します。完璧ではないのに、これは私にとっては十分です。

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

ドキュメントから:

A ScrollViewはFlickableを交換するか、既存の Flickableを飾るためにも使用することができます。

...

flickableItem:項目

ScrollViewのflickableItem。 に提供されたcontentItemがFlickableの場合、それはcontentItemになります。

スクロールビューがFlickableと組み合わせて使用​​されている場合にのみflickableItemプロパティが移入されることを私にね。あなたのコードではそうではありません。

EDITは:少し調査した後、私はあなたがFlickableを使用していない場合でも、プロパティがあることが判明していますが、ScrollView内の実際Flickableを持っている場合、信号は、のみが放出され、それは、を意志マウスホイールを使用して上から下にまっすぐスクロールしたり、マウスホイールを使用して素早くスクロールすると、スクロールバーはそれをしないでフリックすることはありません。のみが出力されます。理想的ではない、バグの種類...

Flickableを使用して手動でスクロールバーを置くだけで、それを行う方法がたくさんあります。そして、それは停止になるといつも出るでしょう。

+0

入力いただきありがとうございます。はい、バグのようです。あなたが書いたように私はFlickableを交換しなかったし、上から下へ、またはその逆にすばやくスクロールしようとしていた。そして、スクロール・ビューがシュートしてバウンスするときだけonMovementEndedイベントを得る。 – philipp

+1

はい、オーバーシュートした場合にのみ、実際のスクロールは、スクロールバーが最後に到達してオーバーシュートのみに到達するまでフリッキングに実際には影響しません。私のQML経験では、あなたのニーズに合わせて自分でやる必要があります。ストックQMLコンポーネントは、その意図された狭い用途の外ではかなり役に立たない。 – dtech

関連する問題