2016-06-12 90 views
1

我希望在拖動時能夠打印Flickable視圖的高度/寬度。我相信可以使用onDraggingChangedonMovingChanged來完成,因爲類似的事件監聽器onTextChanged可以在文本控件中監聽文本更改。 我嘗試這樣做:拖動視圖時QML可滑動的打印高度/寬度

Flickable{ 
    id: flick 
    height: parent.height - 40 
    width: parent.width - 40 
    anchors.bottom: parent.bottom 
    anchors.right: parent.right 
    anchors.margins: 20 
    flickableDirection: Flickable.HorizontalAndVerticalFlick 
    Rectangle{ 
     anchors.fill: parent 
     color: "steelblue" 
    } 
    onMovingChanged: { 
     console.log("onMovingChanged") 
     console.log("height:", height) 
    } 
    onDraggingChanged: { 
     console.log("onDraggingChanged") 
     console.log("height:", height) 
    } 
} 

但這些事件偵聽器將只打印在開始和拖動/移動flickable結束時的高度。那麼我如何實現這一目標呢?

+0

你知道在你的例子中高度永遠不會改變,對吧?此外,如Filip所示,在onContentXChanged/onContentYChanged中打印某些內容可能會降低GUI的速度。 – Yoann

+0

@Yannn我想玩動畫和調整佈局的大小,所以我需要知道每個位置的高度。我非常瞭解使用它的缺點:) –

回答

1

我相信Flickable.contentXChangedFlickable.contentYChanged信號是你所需要的。

  • Flickable.draggingChanged僅在拖動開始和結束時發出。
  • Flickable.movingChanged僅在Flickable開始和結束移動時發出。
  • Flickable.contentXChanged每當內容水平移動時發出。
  • Flickable.contentYChanged每當內容垂直移動時發出。

此外,每次文本更改時都會發出Text.textChanged

+0

對不起,我查看了這個鏈接:http://doc.qt.io/qt-5/qml-qtquick-flickable.html#flickEnded-信號,我找不到那4個信號。你可以請我鏈接到一個文檔? –

+1

@AkashAggarwal你沒有在文檔中看到它們,因爲在QML中,每個屬性都有'changed'信號。即使你創建自己的屬性。你可以閱讀[這裏](http://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html)。這就是QML的工作方式,這就是爲什麼您可以輕鬆綁定值的原因。每當屬性更改值發出信號時,將重新計算基於此值的所有值。所以文檔中沒有'Flickable.contentXChanged',但有'Flickable.contentX'。 –

+0

謝謝,此信息有助於更好地瞭解QML。 –