Ako sa vyhnúť záväzné slučky pri stanovení čalúnenia?

0

Otázka

Chcem aktualizovať polstrovanie z ScrollView ak je posúvač viditeľné, ale na druhej strane, viditeľnosť posúvač je závislá na výšku/šírku obsahu vo vnútri posúvač, čo sa zmení, keď sa čalúnenia zmeny. Nasledujúce príčiny záväzné slučky:

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


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

Ako môžem dosiahnuť to bez záväzných slučky? Vďaka

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

Najlepšiu odpoveď

0

Bol som schopný sa dostať svoj kód frag do práce - vyzerá to, že váš kód by mal závisieť na obsah ScrollView,, ale to nie je zahrnuté v kóde frag, a to môže byť chýbajúce niektoré ďalšie odkazy.

Každopádne, odporúčam blížiace sa to trochu inak - zmeniť ScrollView"s obsahom šírky na základe toho, či sú, alebo nie ScrollBar je viditeľné. Som tiež nastaviť ScrollBar politika namiesto viditeľnosť. Vytvoril som plný príklad, kde môžete pridať alebo odstrániť obsah pomocou posuvníka pre demonštrácie:

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 vec je vedieť - váš ScrollView obsah nemôže byť jeho výška závisí od jeho šírka, napríklad, ak obsah mal nejaké Text že zábaly, ak nie je dostatok šírka, spôsobuje to, aby si vyšší, keď šírka klesá. To by dostať späť do nekonečnej slučky území.

2021-11-16 04:25:42

Ďakujeme za váš komentár. To je presne to, čo som za obsah a textArea s zalomenia, ktorých výška je závislá na šírku. Existuje spôsob, ako sa môžem vyhnúť rekurzie v tomto prípade?
Denis

V iných jazykoch

Táto stránka je v iných jazykoch

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