Dolguyu ayarlarken bağlama döngüsünden nasıl kaçınılır?

0

Soru

Görünür bir kaydırma çubuğu varsa, bir kaydırma çubuğunun dolgusunu güncellemek istiyorum, ancak diğer yandan kaydırma çubuğunun görünürlüğü, kaydırma çubuğunun içindeki içeriğin yüksekliğine/genişliğine bağlıdır; bu, dolgu değiştiğinde değişir. Aşağıdakiler bir bağlama döngüsüne neden olur:

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


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

Bunu bir bağlama döngüsü olmadan nasıl başarabilirim? Teşekkürler

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

En iyi cevabı

0

Kod parçanızın çalışmasını sağlayamadım-kodunuzun içeriğine bağlı olması gerektiği gibi görünüyor. ScrollView ancak bu, kod parçanıza dahil değildir ve diğer bazı referanslar eksik olabilir.

Her neyse, buna biraz farklı yaklaşmanızı öneririm - ScrollView's içerik genişliği olsun veya olmasın dayalı ScrollBar görülebilir. Ben de ayarladım ScrollBar görünürlük yerine politika. Gösteri için bir kaydırıcı kullanarak içerik ekleyebileceğiniz veya kaldırabileceğiniz tam bir örnek oluşturdum:

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

Tek bir şey bile dikkat etmek senin ScrollView içeriğin yüksekliği genişliğine bağlı olamaz, örneğin içeriğin bir kısmı varsa Text bu, yeterli genişlik yoksa sarar ve genişlik azaldığında daha uzun olmasına neden olur. Bu, sonsuz döngü bölgesine geri dönecektir.

2021-11-16 04:25:42

Teşekkür için senin yorum. İçerik için tam olarak sahip olduğum şey budur - yüksekliğin genişliğe bağlı olduğu kelime kaydırmalı bir textArea. Bu durumda özyinelemeyi önlemenin bir yolu var mı?
Denis

Diğer dillerde

Bu sayfa diğer dillerde

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