Qml Combobox не закрывается, когда делегат представления списка выходит из области видимости - PullRequest
1 голос
/ 05 апреля 2020

Я сделал делегат для списка, который содержит Combobox . Если я открою Combobox и прокручиваю вид списка, всплывающее окно Combobox перемещается с позицией делегата, это нормально. Но когда делегат выходит из области просмотра списка (см. Прилагаемое изображение примера), всплывающее окно Combobox продолжает перемещаться даже за пределы области просмотра списка.

Как закрыть комбинированный список когда соответствующий делегат выходит из области просмотра списка.

Заранее спасибо ...

Код идет сюда

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Column {
        spacing: 0
        anchors.fill: parent
        Item {
            width: parent.width
            height: parent.height * 0.4
            Image {
                anchors.fill: parent
                anchors.margins: 10
                source: "https://lh4.googleusercontent.com/proxy/cITVCAj9KJ5Hfwd5iuNDhzdB2pSrMQv2rzTl-vvg23Ifhe2qdCisZBG-MzV35y_r2zijC9X4QOpda9eHzr_hA"
            }
        }
        ListView {
            width: parent.width
            height: parent.height * 0.7
            model: 10
            spacing: 5
            clip: true
            delegate: Rectangle {
                width: parent.width
                height: 50
                color: index % 2 == 0 ? "lightsteelblue" : "steelblue"
                Row {
                    spacing: 25
                    anchors.centerIn: parent
                    Label {
                        text: qsTr("%1").arg(index)
                        anchors.verticalCenter: parent.verticalCenter
                    }
                    ComboBox {
                        anchors.verticalCenter: parent.verticalCenter
                        model: ["a", "b", "c"]
                    }
                }
            }
        }
    }
} 

popup_goes_outofarea_sample

1 Ответ

1 голос
/ 06 апреля 2020

Если нет особой цели держать всплывающее окно ComboBox открытым при прокрутке, добавьте следующее свойство к вашему ListView:

highlightRangeMode: ListView.StrictlyEnforceRange

Это закроет всплывающее окно ComboBox, когда ListView прокручивается.

PS

Кроме того, устранена проблема с выходом списка ComboBox из области просмотра.

ОБНОВЛЕНИЕ при выпуске с header элемент скрывается под другими элементами списка :

В соответствии с описанием ListView.StrictlyEnforceRange - the highlight never moves outside of the range. The current item changes if a keyboard or mouse action would cause the highlight to move outside of the range., когда элемент выходит за пределы диапазона, список меняет следующий элемент, и ComboBox закрывает его всплывающее окно, но поскольку элемент заголовка ниже других ListView элементов (см. этот параграф https://doc.qt.io/qt-5/qml-qtquick-listview.html#stacking -order-in-listview , делегат всегда выше заголовка), здесь невозможно отобразить заголовок по умолчанию здесь, в верхней части других элементов. Я бы предложил вам реализовать свой собственный заголовок за пределами списка. Извините, возможно, я не знал Qt так хорошо, чтобы найти другое решение.

...