1

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

我正在学习 Sailfish 的应用程序开发,之前在 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")
    }
}

您现在可以在messageTextField 中输入文本,然后按 Enter 将其添加到logTextArea。

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

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

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

在此先感谢您的任何建议!

奖励问题: 我尝试过安排,headermessage以前,但不知道如何制作和保持默认高度,但要扩大以填充屏幕。在 GTK 中有一个扩展属性。有什么提示吗?logColumnheadermessagelog

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

4

0 回答 0