如何以编程方式将ScrollView滚动到底部?

雅各布战争

我一直在尝试创建一个使用Qt Quick Controls 2以编程方式滚动到ScrollView底部的函数。我尝试了各种选项,但是我在网上找到的很多支持都涉及Qt Quick Controls 1,而不是2。这就是我试过了:

import QtQuick 2.8
import QtQuick.Controls 2.4

ScrollView {
    id: chatView

    anchors.top: parent.top
    anchors.left: parent.left
    anchors.right: parent.right
    anchors.bottom: inputTextAreaContainer.top

    function scrollToBottom() {
        // Try #1
//      chatView.contentItem.contentY = chatBox.height - chatView.contentItem.height
//      console.log(chatView.contentItem.contentY)

        // Try #2
//      flickableItem.contentY = flickableItem.contentHeight / 2 - height / 2
//      flickableItem.contentX = flickableItem.contentWidth / 2 - width / 2

        // Try #3
        chatView.ScrollBar.position = 0.0 // Tried also with 1.0
    }

    TextArea {
        id: chatBox
        anchors.fill: parent
        textFormat: TextArea.RichText
        onTextChanged: {
            // Here I need to scroll
            chatView.scrollToBottom()
        }
    }
}

有谁知道如何使用Qt Quick Controls 2实现此目的?如果没有,那么有人可以替代这种方法吗?

斯科普恰诺夫

原因

您正在尝试将ScrollBar的位置设置为1.0

chatView.ScrollBar.position = 0.0 // Tried also with 1.0

但是,您不考虑其大小。

ScrollBar像这样设置位置时,请考虑其大小

chatView.ScrollBar.vertical.position = 1.0 - chatView.ScrollBar.vertical.size

我如何提出这个解决方案?

我很好奇Qt本身是如何解决这个问题的,所以我看了看它是如何QQuickScrollBar::increase()实现的,我看到了这条线:

setPosition(qMin<qreal>(1.0 - d->size, d->position + step));

然后,我接受的第一个参数qMin,即1.0 - d->size,解决方案很明确。

由于您未提供MCE,因此我自己写了一封信。我希望您可以针对您的特殊情况进行调整。这里是:

import QtQuick 2.8
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.12

ApplicationWindow {
    width: 480
    height: 640
    visible: true
    title: qsTr("Scroll To Bottom")

    ColumnLayout {
        anchors.fill: parent

        ScrollView {
            id: scrollView

            Layout.fillWidth: true
            Layout.fillHeight: true

            function scrollToBottom() {
                ScrollBar.vertical.position = 1.0 - ScrollBar.vertical.size
            }

            contentWidth: children.implicitWidth
            contentHeight: children.implicitHeight
            ScrollBar.vertical.policy: ScrollBar.AlwaysOn
            clip: true

            ColumnLayout {

                Layout.fillWidth: true
                Layout.fillHeight: true

                Repeater {
                    model: 50

                    Label {
                        text: "Message: " + index
                    }
                }
            }
        }

        TextField {
            Layout.fillWidth: true
        }
    }

    Component.onCompleted: {
        scrollView.scrollToBottom()
    }
}

结果

该示例产生以下结果:

带有列表的窗口,滚动到底部

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何以编程方式将ScrollView滚动到底部?

来自分类Dev

如何将ListView滚动到底部?

来自分类Dev

UITableView滚动到底部

来自分类Dev

如何以编程方式将滚动条移动到画布的底部-Tkinter

来自分类Dev

检测何时将textarea滚动到底部

来自分类Dev

如何修复JTextArea滚动到底部?

来自分类Dev

如何使RecyclerView始终滚动到底部

来自分类Dev

将UICollectionView滚动到底部

来自分类Dev

将UITextView滚动到底部而不显示动画

来自分类Dev

如何以编程方式将UICollectionView滚动到底部?

来自分类Dev

浓缩咖啡:如何滚动到ScrollView的底部

来自分类Dev

在JavaFX中,如何以编程方式将Scrollpane滚动到底部?

来自分类Dev

如何以编程方式将堆栈视图嵌入滚动视图

来自分类Dev

Nativescript:如何以编程方式禁用/启用ScrollView滚动?

来自分类Dev

自动滚动到底部

来自分类Dev

如何始终滚动到底部?

来自分类Dev

如何以编程方式滚动到底部(Android,kotlin)?

来自分类Dev

将本机FlatList滚动到底部以进行聊天

来自分类Dev

检测何时将Delphi FMX ListBox滚动到底部?

来自分类Dev

如何将ListView滚动到底部?

来自分类Dev

ListView:如何始终滚动到底部

来自分类Dev

如何以编程方式将表格滚动到特定的tr

来自分类Dev

如何编写imacro滚动到底部

来自分类Dev

如何将显示div滚动到底部

来自分类Dev

DatagridView:如何以编程方式将当前索引移动到以编程方式选择的行?

来自分类Dev

页面加载时如何将页面滚动到底部?

来自分类Dev

如何以编程方式滚动到滚动视口的末尾?

来自分类Dev

UITableView 如何保持滚动到底部[自动滚动]?

来自分类Dev

如何设置 UIScrollView 滚动到底部?

Related 相关文章

热门标签

归档