Мне не удалось заставить ваш фрагмент кода работать - похоже, ваш код должен зависеть от содержимого вашего ScrollView
, но это не включено в ваш фрагмент кода, и в нем могут отсутствовать некоторые другие ссылки.
В любом случае, я предлагаю подойти к этому немного по - другому-изменить ScrollView
ширина содержимого зависит от того, является ли ScrollBar
это видно. Я также установил ScrollBar
политика вместо видимости. Я создал полный пример, в котором вы можете добавлять или удалять контент с помощью слайдера для демонстрации:
import QtQuick 2.15
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.12
ApplicationWindow {
id: root
visible: true
height: 500
width: 500
ColumnLayout {
anchors {
fill: parent
}
Slider {
// use slider to add delegates to the ScrollView to toggle the scroll bar visibility
id: slider
to: 20
}
ScrollView {
id: scroll
Layout.fillHeight: true
Layout.fillWidth: true
ScrollBar.vertical.policy: scrollBarVisible ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
property bool scrollBarVisible: scroll.contentHeight > scroll.height
ColumnLayout {
width: scroll.scrollBarVisible ? scroll.width - scroll.ScrollBar.vertical.width : scroll.width // change the width of the
Repeater {
model: slider.value
delegate: Rectangle {
color: "tomato"
Layout.fillWidth: true
Layout.preferredHeight: 150
}
}
}
}
}
}
Однако следует отметить одну вещь - ваш ScrollView
содержимое не может иметь высоту, зависящую от его ширины, например, если содержимое имело некоторые Text
это оборачивается, если недостаточно ширины, в результате чего он становится выше, когда ширина уменьшается. Это вернулось бы на территорию бесконечного цикла.