У меня есть TextArea
, который обычно будет содержать только одну строку текста.Однако я хочу, чтобы пользователь мог добавить больше, и TextArea
можно увеличить до максимум 15 строк, после чего любой дополнительный текст будет доступен через полосу прокрутки.Я смог заставить аспект прокрутки работать, если TextArea
содержаться в Flickable
(что в конечном итоге содержится в Rectangle
).
Rectangle {
id: rec
width: 200
height: 25
Flickable {
id: flickable
anchors.fill: parent
contentWidth: textArea.width
contentHeight: textArea.height
TextArea.flickable:
TextArea {
id: textArea
text: qsTr("Hello, world!")
wrapMode: Text.WordWrap
}
ScrollBar.vertical: ScrollBar { }
}
}
На данный момент, какя бы продолжил, чтобы текстовое поле расширялось текстом до некоторого предопределенного максимального числа пикселей (скажем, 300)?
Редактировать
Хорошо, почти тампросто одна проблема с правильным центрированием текста с помощью решения Митча.Мой main.qml
файл содержит следующее:
import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
HelloWorld{
anchors.centerIn: parent
}
}
Любой мой HelloWorld.qml
файл содержит следующее:
import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.3
import QtQuick.Dialogs 1.2
import QtQuick.Controls.Styles 1.4
ColumnLayout{
width: 250
FontMetrics {
id: fontMetrics
font: textArea.font
}
Flickable {
id: flickable
width: parent.width
height: Math.min(contentHeight, fontMetrics.height * 15)
contentWidth: width
contentHeight: textArea.implicitHeight
clip: true
TextArea.flickable: TextArea {
id: textArea
text: "Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! "
+ "Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! "
wrapMode: Text.WordWrap
//padding: 0
background: Rectangle {
border.color: "blue"
}
}
ScrollBar.vertical: ScrollBar {}
}
}
Это очень близко к работе, но по той или иной причинекогда у меня есть этот код за пределами main.qml
, текст смещается ниже и вправо, пока пользователь не выберет его:
После выборатекст выглядит следующим образом (именно с этого я и хочу начать):