Cómo evitar el lazo de unión cuando la configuración de relleno?

0

Pregunta

Quiero actualizar el relleno de un ScrollView si hay una barra de desplazamiento visible, pero por otro lado, la visibilidad de la barra de desplazamiento depende de la altura, la anchura del contenido dentro de la barra de desplazamiento, lo que cambia cuando el relleno de los cambios. Las siguientes causas de un lazo de unión:

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


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

¿Cómo puedo lograr esto sin un lazo de unión? Gracias

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

Mejor respuesta

0

Era incapaz de obtener su código de fragmentación para el trabajo - parece que el código debe depender de los contenidos de su ScrollViewpero esto no está incluido en el código de fragmentación, y puede ser que faltan algunas otras referencias.

De todos modos, sugiero acercarse un poco diferente - cambiar el ScrollView's el contenido de la anchura en función de si o no el ScrollBar es visible. También he puesto el ScrollBar la política en lugar de visibilidad. He creado un ejemplo completo donde usted puede añadir o eliminar los contenidos mediante un control deslizante para la demostración:

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 a tener en cuenta a pesar de que su ScrollView el contenido no puede tener su altura depende de su ancho, por ejemplo, si el contenido de algunos Text que envuelve si no hay suficiente ancho, haciendo que para llegar más alto cuando el ancho disminuye. Este sería volver a infinito bucle de territorio.

2021-11-16 04:25:42

Gracias por tu comentario. Eso es exactamente lo que tengo para contenidos de un área de texto con word wrap, donde la altura depende de la anchura. Hay una forma de evitar la recursividad en este caso?
Denis

En otros idiomas

Esta página está en otros idiomas

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