Автоматическая прокрутка TextArea в QML Sailfish / Silica
Обновление: возможное решение внизу.
Я изучаю разработку приложений для Sailfish с очень небольшим опытом работы с Qt/QML, но с некоторым опытом работы с другими инструментами (GTK, Tk, Motif, Xaw).
В настоящее время я пишу тупой клиент чата (без протокола, просто отправляю текст по сети). У меня есть страница разговора / чата, определенная в QML следующим образом:
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
а также log
в Column
ранее, но не знал, как сделать header
а также message
сохранить их высоту по умолчанию, но сделать log
разверните, чтобы заполнить экран. В GTK есть расширенное свойство для этого. Есть намеки?
Возможное решение: поместите TextArea внутри SilicaFlickable. По какой-то причине TextArea уже можно прокручивать без этого дополнительного шага, но этот способ можно использовать scrollToBottom()
и заставить желаемое поведение. В качестве бонуса, таким образом, мы можем добавить красивую полосу прокрутки.