Como evitar a ligação de loop quando a configuração de preenchimento?

0

Pergunta

Eu quero atualizar o preenchimento de um ScrollView se houver uma barra de rolagem visível, mas, por outro lado, a visibilidade da barra de rolagem é dependente da altura/largura do conteúdo dentro da barra de rolagem, o que muda quando o preenchimento alterações. A seguir faz com que uma associação de loop:

ScrollView {
  id: control
  rightPadding: Scrollbar.vertical.visible ? Scrollbar.vertical.width : 0
   ....


  ScrollBar.vertical: ScrollBar {
    parent: control
    visible: control.height < height
   ...
  }
}

Como posso conseguir isso sem uma ligação loop? Obrigado

qml qt qtquickcontrols2
2021-11-15 14:43:32
1

Melhor resposta

0

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.

2021-11-16 04:25:42

Obrigado por seu comentário. Isso é exatamente o que eu tenho para o conteúdo de um textArea com o word wrap, onde a altura é dependente da largura. Existe uma maneira que eu possa evitar recursividade neste caso?
Denis

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................