Cum pentru a evita obligatoriu buclă atunci când setarea padding?

0

Problema

Vreau sa fac update de umplutură de un ScrollView dacă nu există o bară de derulare vizibile, dar pe de altă parte, vizibilitatea bara de defilare este dependentă de înălțimea/lățimea de conținut în interiorul defilare, care se schimbă atunci când schimbările de umplutură. Următoarele cauze obligatoriu bucla:

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


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

Cum pot realiza acest lucru fără un caracter obligatoriu bucla? Multumesc

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

Cel mai bun răspuns

0

Am fost în imposibilitatea de a obține codul dvs. frag la locul de muncă - se pare ca codul ar trebui să depindă de conținutul de ScrollView, dar acest lucru nu este inclus în codul de frag, si poate fi lipsesc unele alte referințe.

Oricum, sugerez să se apropie acest lucru un pic diferit - schimba ScrollViewmodelului lățime conținutul în funcție de dacă sau nu ScrollBar este vizibilă. Am stabilit, de asemenea, ScrollBar politica în loc de vizibilitate. Am creat un exemplu complet, unde puteți adăuga sau elimina conținut folosind un slider pentru demonstrație:

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

Un lucru de remarcat, deși - ta ScrollView conținutul nu poate avea înălțimea depinde de lățimea sa, de exemplu, în cazul în care conținutul a avut unele Text care se infasoara dacă nu există suficientă lățime, determinând-o să mă mai înalt atunci când lățimea scade. Acest lucru s-ar întoarce în infinit buclă teritoriu.

2021-11-16 04:25:42

Vă mulțumim pentru comentariul tau. Asta e exact ceea ce trebuie pentru conținut - un textArea cu folie de cuvânt, în cazul în care înălțimea este dependentă de lățimea. Este o metodă prin care pot evita recursivitate în acest caz?
Denis

În alte limbi

Această pagină este în alte limbi

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