Ich bin ein benutzerdefiniertes QML ComboBox mit Kontrollkästchen erstellen. Es zeigt alles gut an, aber ich bin nicht in der Lage, das Popup-Abschlussereignis zu steuern.Steuerelement schließen von Popup für QML ComboBox mit Kontrollkästchen
Ich möchte die Combobox Popup geöffnet bleiben, so dass ich mehrere Elemente überprüfen konnte. Und schließe nur, wenn ich außerhalb meines Elternteils klicke oder auf Flucht klicke. Momentan schließt es, sobald ich einen Gegenstand überprüfe.
Ich benutze das CheckDelegate, so dass ich die Combobox-Popup-Darstellung überschreiben konnte. Warten Sie nicht, lassen Sie mich mehrere Artikel auf einmal überprüfen.
Hier ist mein Beispielcode für die benutzerdefinierte Combobox
import QtQuick 2.7
import QtQuick.Controls 2.1
ComboBox {
id: control
property alias combo_box_model: control.model
property string combo_box_displayText: control.displayText
property var combo_box_height
model: combo_box_model
delegate: CheckDelegate {
id: checkbox_control
width: control.width
contentItem: Text {
leftPadding: checkbox_control.indicator.width + control.leftPadding
text: modelData
font: control.font
elide: Text.ElideRight
verticalAlignment: Text.AlignVCenter
}
highlighted: control.highlightedIndex === index
// checked: combo_box_model.isChecked(index)
indicator: Rectangle {
implicitWidth: 26
implicitHeight: 26
x: control.leftPadding
anchors.verticalCenter: parent.verticalCenter
radius: 3
color: "transparent"
border.color: checkbox_control.down ? "#17a81a" : "#21be2b"
Rectangle {
width: 14
height: 14
x: 6
y: 6
radius: 2
color: checkbox_control.down ? "#17a81a" : "#21be2b"
visible: checkbox_control.checked
}
}
// onClicked: {
// combo_box_model.setChecked(index, checked)
// }
}
contentItem: Text {
leftPadding: 0
rightPadding: control.indicator.width + control.spacing
text: control.displayText
font: control.font
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
popup: Popup {
id: checkbox_popup
y: control.height - 1
width: control.width
implicitHeight: contentItem.implicitHeight
padding: 1
contentItem: ListView {
clip: true
implicitHeight: combo_box_height ? combo_box_height : contentHeight
model: control.popup.visible ? control.delegateModel : null
currentIndex: control.highlightedIndex
ScrollIndicator.vertical: ScrollIndicator { }
}
}
}
Für die Combobox Popup (checkbox_popup), habe ich versucht, die closePolicy zu NoAutoClose Einstellung, aber kein Glück.
So fühle ich mich irgendwo in der CheckDelegate Ich muss das nahe Ereignis oder so zu fangen und damit umgehen. Aber nicht genau, wie oder fehlt mir etwas? Ziemlich Neuling so weit wie QML betroffen ist.
Super! Danke Mitch. Das funktioniert. Guter Trick!! Nun, wie @Mark erwähnt, wenn ComboBox für einzelne Auswahl verwendet werden soll, muss ich vielleicht ein wenig nachdenken. Ich hatte gehofft, ich könnte die Auswahl als eine elide Text in der Combo-Box anzeigen (contentItem). – pappachino