Jak, aby se zabránilo vázání smyčky při nastavení odsazení?

0

Otázka

Chci aktualizovat polstrování z ScrollView pokud je posuvník viditelné, ale na druhou stranu, viditelnost posuvník je závislá na výšku/šířku obsahu uvnitř posuvníku, který se změní, když polstrování změny. Následující příčiny závazné smyčky:

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


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

Jak mohu dosáhnout bez vázání smyčky? Díky

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

Nejlepší odpověď

0

Byl jsem schopen se dostat váš kód frag pracovat - zdá se, že váš kód by měl záviset na obsah ScrollView, ale to není zahrnuto v kódu frag, a to může být chybějící některé další odkazy.

Každopádně, navrhuji, blíží se to trochu jinak - změnit ScrollViewobsahu na šířku na základě toho, zda nebo ne ScrollBar je viditelné. Také jsem nastavit ScrollBar politiky namísto viditelnost. Vytvořil jsem kompletní příklad, kde můžete přidat nebo odstranit obsah pomocí posuvníku pro ukázku:

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

Jedna věc k poznámce, i když - vaše ScrollView obsah, nemůže mít jeho výška závisí na jeho šířce, například, je-li obsah měl nějaké Text to zábaly, pokud není dostatek šířku, což způsobuje to, aby se vyšší, když šířka klesá. To by se zpět do nekonečné smyčky území.

2021-11-16 04:25:42

Díky za váš komentář. To je přesně to, co mám na obsah - textArea s zalamování řádků, kde je výška závislá na šířce. Je tam způsob, jak mohu vyhnout rekurzi v tomto případě?
Denis

V jiných jazycích

Tato stránka je v jiných jazycích

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