Come evitare l'associazione del ciclo, durante l'impostazione di imbottitura?

0

Domanda

Voglio aggiornare l'imbottitura di una ScrollView se c'è una barra di scorrimento visibile, ma d'altra parte, la visibilità della barra di scorrimento dipende l'altezza e la larghezza del contenuto all'interno della barra di scorrimento, che cambia quando l'imbottitura modifiche. Le seguenti cause di un ciclo di associazione:

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


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

Come posso raggiungere questo obiettivo senza un ciclo di associazione? Grazie

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

Migliore risposta

0

Sono stato in grado di ottenere il vostro codice di frag per il lavoro - sembra che il codice dovrebbe dipendono il contenuto del tuo ScrollViewma questo non è incluso nel codice frag, e si potrebbe essere mancante di alcuni altri riferimenti.

Comunque, suggerisco che si avvicina un po ' diverso - modificare il ScrollView's contenuto e larghezza in base a se o non la ScrollBar è visibile. Ho anche impostato il ScrollBar la politica, invece di visibilità. Ho creato un esempio completo in cui è possibile aggiungere o rimuovere i contenuti utilizzando un dispositivo di scorrimento per la dimostrazione:

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
                    }
                }
            }
        }
    }
}

Una cosa da notare, però - il ScrollView il contenuto non può avere la sua altezza dipende dalla sua larghezza, per esempio, se il contenuto era qualche Text che avvolge se non è sufficiente larghezza, causando per ottenere più alto quando la larghezza diminuisce. Questo sarebbe tornare in infinite loop territorio.

2021-11-16 04:25:42

Grazie per il tuo commento. Che è esattamente quello che ho per il contenuto di una textArea con word wrap, in cui l'altezza dipende dalla larghezza. C'è un modo per evitare la ricorsione in questo caso?
Denis

In altre lingue

Questa pagina è in altre lingue

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