3

各 TextField が前の TextField の下部に固定された列に配置されたFlickable多数のオブジェクトを含む があります。TextFieldタブキーを使用してこれらのフィールドをナビゲートすると、最終的にフォーカスがの目に見える長方形の外側にある TextField に移動しFlickable、ユーザーが Flickable を手動で下にスクロールするまでカーソルが表示されないことを除いて、すべて正常に機能しています.

基本的に、TextField がフォーカスを受け取ると、Flickable が自動的にスクロールされ、フォーカスされた TextField が完全に表示されるような、ある種の「.ensureVisible()」メソッドを探しています。

4

2 に答える 2

1

dtechの答えは的を射ています。スナップ アニメーションと簡単に組み合わせることができ、x 方向のフリッカブルも簡単に変更できます。また、ユーザーが意図的にフリック可能なものをフリックまたはドラッグしている可能性があります。私の場合、C++ コードは、フリック可能に含まれるグリッド レイアウトのアイテムのテキストまたは表示効果を制御していました。フリック可能なものは、C++ コードがそうするように指示したときにうまくフリックする必要がありましたが、ユーザーが意図的にドラッグまたはフリックした場合はそうではありませんでした。以下は、x 方向のフリック可能に変更された dtech の関数です。

function ensureVisible(item) {
    if (moving || dragging)
        return;
    var xpos = item.mapToItem(contentItem, 0, 0).x
    var ext = item.width + xpos
    if ( xpos < contentX // begins before
              || xpos > contentX + width // begins after
              || ext < contentX // ends before
              || ext > contentX + width) { // ends after
        // don't exceed bounds
        var destinationX = Math.max(0, Math.min(xpos - width + item.width, contentWidth - width))
        ensureVisAnimation.to = destinationX;
        ensureVisAnimation.from = contentX;
        ensureVisAnimation.start();
    }
}
//This animation is for the ensure-visible feature.
NumberAnimation on contentX {
    id: ensureVisAnimation
    to: 0               //Dummy value - will be set up when this animation is called.
    duration: 300
    easing.type: Easing.OutQuad;
}
于 2019-05-07T12:17:04.303 に答える