У меня есть несколько экземпляров объекта Label
, созданного в цикле.У каждого из них свой текст.Если текст достаточно длинный, он обрезается.
Что мне нужно сделать, это установить высоту метки, чтобы она превышала высоту содержимого, чтобы весь текст был виден.
Я понял, что могу сделать следующее: height: contentHeight + Theme.paddingMedium
, чтобы достичь своей цели, но это решение вызывает предупреждение QML Label: Binding loop detected for property "height"
.
Мне интересно, есть ли способ правильно изменить размерметка без предупреждающего сообщения.
Я пытался поместить код установки высоты в различные обработчики сигналов (onContentSizeChanged
, onTextChanged
и т. д.) и Component.onCompleted
, но, несмотря на выполнение обработчиков, текствсе еще обрезается.
Я также пытался использовать объект Connections
, но он жалуется только на несуществующие свойства.
РЕДАКТИРОВАТЬ: Вот пример того, что я делаю.
У меня есть страница, определенная более или менее так
Page {
// only for getting the data
Connections {
target: api
onMessagesChanged: mmlv.model = api.messages
// api.messages is based off QAbstractListModel
}
// end of data fetching code
SilicaListView {
id: mmlv
width: parent.width
anchors.fill: parent
clip: true
spacing: Theme.paddingMedium
delegate: MMDelegate {
width: ListView.view.width*0.75
}
VerticalScrollDecorator {}
}
}
Затем MMDelegate.qml
используется для заполнения представления метками:
ListItem {
contentHeight: column.height + Theme.paddingLarge
Component.onCompleted: ldr.setSource("TextMessage.qml", {"text": model.message})
Column {
id: column
width: parent.width
spacing: Theme.paddingSmall
anchors.verticalCenter: parent.verticalCenter
Loader {
id: ldr
width: parent.width
}
}
Rectangle {
z: -1
anchors.fill: parent
color: Theme.secondaryHighlightColor
}
}
И, наконец, одна меткаопределено в файле TextMessage.qml
:
Label {
width: parent.width
anchors {
left: parent.left
leftMargin: Theme.paddingMedium
right: parent.right
rightMargin: Theme.paddingMedium
}
wrapMode: Text.WordWrap
// height: contentHeight + Theme.paddingMedium
}
И что интересно, некоторые более длинные тексты показаны полностью, а более короткие - обрезаны.Я думаю, что это какой-то угловой случай, в который попало всего несколько сообщений.