Делаю настроечное меню для приложения. Оно у меня длинное, длинее высоты экрана, поэтому помещаю его в элемент Flickable. Меню представляет собой Column, которая набирается из Item:
Flickable {
id: flickable
width: Screen.width
height: Screen.height
boundsBehavior: Flickable.DragAndOvershootBounds
flickableDirection: Flickable.VerticalFlick
contentHeight: menuList.height
Column {
id: menuList
spacing: 5
anchors.fill: parent
Item {
id: rowLanguageSettings
height: Screen.height / 8
anchors.right: parent.right
anchors.left: parent.left
Label {
id: languageLabel
text: qsTr("Language1")
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
}
ComboBox {
id: languageSelectComboBox
anchors.leftMargin: parent.width * 0.64
anchors.left: parent.left
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
model: ["Eng", "Rus"]
}
}
Item {
id: rowSpeedSettings
height: Screen.height / 8
...
}
Для того, чтобы работала вертикальная прокрутка, необходимо указать contentHeight. Если его указать просто числом, с запасом, например 3000, то прокрутка работает.
Но ведь надо указывать настоящий размер меню, поэтому я пишу:
contentHeight: menuList.height
и получаю ошибку:
QML Flickable: Binding loop detected for property "contentHeight"
Но никакого зацикливания в коде нет. Никаких других установок высоты, кроме тех что показаны в коде выше, ни в элементах ни в подэлементах нет. (Можно убрать id у Item и понакопировать штук 10 их).
Но из-за этой ошибки не работает прокрутка. Меню все время стремится к верхней точке, и низа увидеть невозможно.
Я навесил отладочное сообщение на изменение
onContentHeightChanged: {
console.log("ContentHeight: "+contentHeight);
}
И оно показало, что вычислимое значение равняется 440. Хотя высота меню явно около 2500.
Вот. Как можно исправить такую ситуацию?