QML - 移动到可轻弹的顶部底部

QML - Move to top bottom of flickable

提问人:Anon 提问时间:8/18/2014 最后编辑:eyllanescAnon 更新时间:3/25/2021 访问量:6780

问:

你如何告诉轻拂移动到当前页面的底部。QML - 移至顶部 #TOP 没有提供答案。

QT QML的

评论


答:

6赞 astre 8/18/2014 #1

您需要计算它并将其设置为 contentY。例如:

Flickable {
    width: 200; height: 200
    contentWidth: image.width; contentHeight: image.height

    Image { id: image; source: "file:///path/toBigImageFile" }

    contentY : contentHeight-height
}

评论

0赞 Anon 8/20/2014
好吧,这对我来说是新语法;你能解释一下contentHeight-height是什么吗?这听起来是多余的,你还能用破折号做什么?
1赞 astre 8/20/2014
在这里,我们实际上是从 contentHeight(图像的实际高度)计算 contentY 位置,然后从中减去 height(视图高度)。因此,按照上面的例子,如果图像文件的高度是 768,视图的高度是 200,那么视图的 Y 坐标设置为 568,可以认为是底部。
0赞 Anon 8/20/2014
哦,这是一个减号:D这就解释了;谢谢!
1赞 justengel 9/12/2019 #2

我一直在向 TextArea 添加文本,并希望它保持在底部,除非有人更改滚动位置。

Flickable{
    id: flickable
    anchors.fill: parent

    boundsBehavior: Flickable.DragAndOvershootBounds
    flickableDirection: Flickable.VerticalFlick

    ScrollBar.vertical: ScrollBar {
        id: flickScroll
    }

    TextArea.flickable: TextArea{
        id: monitor
        width: parent.width
        height: parent.height

        readOnly: true
        wrapMode: TextArea.Wrap
        persistentSelection: true
        leftPadding: 6
        rightPadding: 6
        topPadding: 0
        bottomPadding: 0
        background: null
    }

    function currPos(){
        return flickable.contentY
    }

    function setPos(pos){
        flickable.contentY = pos;
    }

    function getEndPos(){
        var ratio = 1.0 - flickable.visibleArea.heightRatio;
        var endPos = flickable.contentHeight * ratio;
        return endPos;
    }

    function scrollToEnd(){
        flickable.contentY = getEndPos();
    }

    function append(text){
        var pos, endPos, value;

        value = monitor.text + String(text);
        // Limit value size here

        endPos = getEndPos();
        pos = currPos();

        monitor.text = value;

        if(pos == endPos){
            scrollToEnd();
        } else {
            setPos(pos);
        }
    }
}

评论

0赞 Kenn Sebesta 7/23/2021
这是一个非常有帮助的答案。我建议的唯一更改是将 的计算四舍五入。这解决了由于浮点计算的精度而产生的小错误。endPos