更新:底部可能的解决方案。
我正在学习 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")
}
}
您现在可以在message
TextField 中输入文本,然后按 Enter 将其添加到log
TextArea。
问题:如何让 TextArea 每次添加消息时自动滚动到底部。
请注意,如果我理解正确,这是使用 Sailfish.Silica TextField,这与标准(QtQuick.Components ?)不同,所以我不能使用log.append("\n> " + text);
QtQuick.Controls(这在 Sailfish 上不可用。)
使用 C++ 而不是 Javascript/QML 的解决方案很好,因为无论如何我都需要它来处理网络。
在此先感谢您的任何建议!
奖励问题: 我尝试过安排,header
和message
以前,但不知道如何制作和保持默认高度,但要扩大以填充屏幕。在 GTK 中有一个扩展属性。有什么提示吗?log
Column
header
message
log
可能的解决方案: 将 TextArea 放在 SilicaFlickable 中。出于某种原因,TextArea 已经可以在没有这个额外步骤的情况下滚动,但是这样可以使用scrollToBottom()
并强制执行所需的行为。作为奖励,通过这种方式我们可以添加一个漂亮的滚动条。