Я новичок в Qml, но я хотел попробовать, стоит ли его использовать вместо старых виджетов Qt, особенно потому, что я слышал, что он лучше для мобильных устройств. Я использую Qml для GUI вместе с парой классов C ++ для основной логики. Мне нужна была прокручиваемая TextArea, как в текстовом редакторе, поэтому я обнаружил, что мне нужно использовать TextArea, вложенное в ScrollView, например:
ScrollView {
...
TextArea {
...
}
}
Мне понравился результат в моем темном приложении QML скрасивый текстовый редактор и красивые полосы прокрутки на темном фоне.
Проблема возникла, когда мне понадобилось реализовать функцию scrollTo в моем коде. Мое приложение - это своего рода плеер, который выделяет текст и прокручивает его вниз, когда он достигает 1/4 высоты. Я обнаружил, что могу использовать свойство flickableItem.contentY для настройки относительного положения текста в моем ScrollView, но свойства там не было, хотя другие ответы ссылались на него.
Я дошел до документации Qt, и никаких признаков этого не было, только свойство contentItem. Поэтому я попытался настроить свойство contentItem.y , но результат был ужасным. Текст и весь фон были панорамированием, покрывая мою верхнюю панель инструментов.
Поэтому я искал в документах другие реализации TextArea и обнаружил, что QtQuick.Controls 1.4 имеет реализацию TextArea, которая унаследовалаКласс ScrollView. Это было решением, подумал я. Я переключился на более старую реализацию и сумел заставить все это работать. Теперь я могу прокручивать свою TextArea программно через свойство flickableItem.contentY и свойства contentHeight vs height , чтобы вычислить, сколько у меня места.
Проблема здесь в том, что версия 1.4 имеет ужасно выглядящие полосы прокрутки, и я чувствую, что использовать старую версию - это своего рода хак. Есть ли причина, по которой они удалили свойство flickableItem из ScrollView? Есть ли другой способ сделать то же самое с новыми версиями Controls?
Вот мой код:
import QtQuick 2.12
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.12
TextArea {
id: textArea
anchors.fill: parent
backgroundVisible: false
/*background: Rectangle {
anchors.fill: parent
color: "#000000"
}*/
//color: "#ffffff"
textColor: "#ffffff"
selectByKeyboard: true
selectByMouse: true
verticalScrollBarPolicy: Qt.ScrollBarAlwaysOn
function scrollToY(y) {
if ((contentHeight-y) > flickableItem.height && y > flickableItem.height/4) {
flickableItem.contentY = y - flickableItem.height/4
}
}
}