Qt 5 の未来は明るいブログ

PathView のキー操作が期待した動作と異なる

Published: 2013-01-23

QtQuick の ListView は focus: true の場合にキーボードの上下(左右)で操作ができますが、PathView はキーボードでの操作に対応していません。

QtQuick 1.1 のサンプルでは以下のようにキーボードで操作するコードが記述されていますが、期待した動作はしていません(遅い)。

PathView {
Keys.onRightPressed: if (!moving) { incrementCurrentIndex(); console.log(moving) }
Keys.onLeftPressed: if (!moving) decrementCurrentIndex()
...
}

Qt Quick 2.0 のサンプルでは キー操作のコード自体が入っていません

この Qt Qucick 2.0 のサンプルに、Qt Quick 1.1 のサンプルを参考に以下のコードを追加してみました。

Keys.onLeftPressed: incrementCurrentIndex()
Keys.onRightPressed: decrementCurrentIndex()

Qt Quick 1.1 同様、スムーズにはスクロールしません。

highlightMoveDuration: 0

と、アイテム移動の間隔を 0 ミリ秒にしてみるとアニメーションはしませんが、移動は速くなります。この値を 50 くらいにするとほぼ期待した動きになるのですが、キー操作のタイミングによって動作が微妙に異なります。

本来ならば、このコードでうごくように Qt 側を修正するべきですが、とりあえず以下のように currentIndex ではなく offset の方を変えて、その変化を滑らかにすることで期待した動作が実現できました。

Behavior on offset { SmoothedAnimation { velocity: 10 } }
Keys.onLeftPressed: offset = Math.round(offset - 1)
Keys.onRightPressed: offset = Math.round(offset + 1)

Trend