更新:底部可能的解决方案。
我正在学习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
中安排message
,log
和Column
,但我们并不知道如何要使header
和message
保持默认高度,但要展开log
以填充屏幕。在GTK中有一个扩展属性。任何提示?
可能的解决方案:将TextArea放入SilicaFlickable中。由于某种原因,TextArea在没有这个额外步骤的情况下已经可以滚动,但是这样可以使用scrollToBottom()
并强制执行所需的行为。作为奖励,我们可以通过这种方式添加一个漂亮的滚动条。