Eu era incapaz de obter o seu código de fragmentação para o trabalho - parece que seu código deve depender do conteúdo de seu ScrollView
, mas isso não é incluído no código frag, e ele pode estar faltando algumas outras referências.
De qualquer maneira, sugiro a aproximar-se desta maneira um pouco diferente - para alterar o ScrollView
's de conteúdo de largura com base na existência ou não o ScrollBar
é visível. Eu também definir o ScrollBar
a política, em vez de visibilidade. Eu criei um exemplo completo, onde você pode adicionar ou remover o conteúdo usando um controle deslizante para demonstração:
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
}
}
}
}
}
}
Uma coisa a notar, porém, - o ScrollView
o conteúdo não pode ter sua altura depende da sua largura, por exemplo, se o conteúdo tinha alguns Text
molda-se não houver número suficiente de largura, fazendo-a chegar mais alto quando a largura diminui. Isso seria voltar ao infinito o loop de território.