Jak uniknąć pętli zakotwiczenia podczas konfigurowania wypełnienia?

0

Pytanie

Chcę zaktualizować wypełnienie składania przewijania, jeśli widoczny jest pasek przewijania, ale z drugiej strony, widoczność paska przewijania zależy od wysokości/szerokości zawartości wewnątrz paska przewijania, która zmienia się przy zmianie wypełnienia. Następujący powoduje cykl wiązania:

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


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

Jak mogę to osiągnąć bez cyklu przyciągania? Dziękuję

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

Najlepsza odpowiedź

0

Nie udało mi się zmusić twój fragment kodu pracować - wygląda na to, że twój kod powinien zależeć od zawartości konta ScrollViewale to nie jest wliczone w twój fragment kodu, w którym mogą być jakieś inne linki.

W każdym razie, proponuję podejść do tego trochę inaczej-zmienić ScrollViewszerokość zawartości zależy od tego, czy jest ScrollBar jest to widoczne. Ja również zainstalowałem ScrollBar polityka zamiast widoczności. Założyłem pełna przykład, w którym można dodawać lub usuwać treści za pomocą suwaka do demonstracji:

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

Należy jednak zwrócić uwagę na jedną rzecz - twój ScrollView zawartość nie może mieć wysokość, w zależności od jego szerokości, na przykład, jeśli zawartość miało pewne Text to okazuje się, że jeśli nie ma wystarczającej szerokości, w wyniku czego staje się wyższy, kiedy szerokość zmniejsza się. To wróciło na terytorium nieskończonej pętli.

2021-11-16 04:25:42

Dziękuję za twój komentarz. To jest dokładnie to, co mam do treści - obszar tekstu z przeniesieniem słów, których wysokość zależy od szerokości. Czy istnieje sposób, aby uniknąć rekurencji w tym przypadku?
Denis

W innych językach

Ta strona jest w innych językach

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