在QML Sailfish / Silica中自动滚动TextArea

时间:2016-01-04 12:57:04

标签: qt qml qt5 sailfish-os

更新:底部可能的解决方案。

我正在学习Sailfish的App开发,之前在Qt / QML方面的经验很少,但在其他工具包(GTK,Tk,Motif,Xaw)方面有一些经验。

我目前正在写一个愚蠢的聊天客户端(没有协议,只是通过网络发送文本。)我在QML中定义了Talk / Chat页面,如下所示:

import QtQuick 2.0
import Sailfish.Silica 1.0

Page {
    id: talkPage

    PageHeader {
        id: header

        title: qsTr("Talk")

        width: parent.width
        anchors.top: parent.top
    }

    TextField {
        id: message

        placeholderText: qsTr("Type your Message...")

        width: parent.width
        anchors.bottom: parent.bottom

        EnterKey.onClicked: {
            log.text += "\n> " + text;
            text = "";
        }
    }

    TextArea {
        id: log

        readOnly: true
        wrapMode: TextEdit.Wrap

        width: parent.width
        anchors.top: header.bottom
        anchors.bottom: message.top

        text: qsTr("Talk log")
    }
}

您现在可以在message TextField中输入文字,然后按Enter键将其添加到log TextArea。

问题:每次添加消息时,如何让TextArea自动滚动到底部。

请注意,如果我理解正确,这是使用Sailfish.Silica TextField,这与标准(QtQuick.Components?)不同所以我不能使用来自QtQuick.Controls的log.append("\n> " + text);(这不是' t可以在Sailfish上找到。)

使用C ++而不是Javascript / QML的解决方案很好,因为我还是需要它来处理网络。

提前感谢任何建议!

奖金问题:我之前尝试在header中安排messagelogColumn,但我们并不知道如何要使headermessage保持默认高度,但要展开log以填充屏幕。在GTK中有一个扩展属性。任何提示?

可能的解决方案:将TextArea放入SilicaFlickable中。由于某种原因,TextArea在没有这个额外步骤的情况下已经可以滚动,但是这样可以使用scrollToBottom()并强制执行所需的行为。作为奖励,我们可以通过这种方式添加一个漂亮的滚动条。

0 个答案:

没有答案