QML élément ComboBox DropDownMenu style
Je veux utiliser le ComboBox
type dans mon projet. Est-il possible de changer l'apparence du menu déroulant (couleur, forme, style de texte) ou dois-je besoin d'utiliser une combinaison de rectangles, ListView
s et d'autres types?
Le code suivant s'applique personnalisations, mais aucune modification n'est défini pour le menu déroulant qui demeure en gris:
ComboBox {
currentIndex: 2
activeFocusOnPress: true
style: ComboBoxStyle {
id: comboBox
background: Rectangle {
id: rectCategory
radius: 5
border.width: 2
color: "#fff"
Image {
source: "pics/corner.png"
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.bottomMargin: 5
anchors.rightMargin: 5
}
}
label: Text {
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
font.pointSize: 15
font.family: "Courier"
font.capitalization: Font.SmallCaps
color: "black"
text: control.currentText
}
}
model: ListModel {
id: cbItems
ListElement { text: "Banana" }
ListElement { text: "Apple" }
ListElement { text: "Coconut" }
}
width: 200
}
OriginalL'auteur otashlanov | 2014-11-23
Vous devez vous connecter pour publier un commentaire.
Le public actuel de l'Api ne permet pas la personnalisation du menu déroulant comme indiqué ici.
Qt 5.4
, c'est à direStyles 1.3
, vient de présenter certaines propriétés pour personnaliser les polices et le texte (docs ici), mais pas encore de l'accès du public à liste déroulante de personnalisation.Aussi, l'exemple fourni dans le lien ne fonctionne pas avec les versions plus récentes de l'intervalle Qt. Voici une version modifiée j'ai testé avec Qt 5.3, Qt et Qt 5.4 5.5 (n'oubliez pas d'ajouter
import QtQuick.Controls.Private 1.0
pour les importations):Ici
__dropDownStyle
est attribué à unMenuStyle
type. Certaines propriétés de ce type sont personnalisés pour obtenir le style désiré, en particulieritemDelegate
(qui définit l'apparence d'un élément à l'intérieur de la zone de liste déroulante) etframe
(fond). Reportez-vous à laMenuStyle
Api pour plus de détails. Résultat global:Noter que cette approche fait parfaitement le travail sur Windows et Android alors que sur OSX le code est complètement ignoré. On peut vérifier les qml fichier de style à l'intérieur de l'intervalle Qt de l'installation (la recherche d'un subpath comme
qml/QtQuick/Controls/Styles/Desktop
) pour voir quels changements w.r.t. Windows et essayer d'adapter la solution fournie. Cette partie est laissée au lecteur.Eh bien, j'ai essayé le code que sur Windows/Android à l'époque, désolé. 🙂 Vous pouvez vérifier le qml fichier de style à l'intérieur de l'intervalle Qt de l'installation (la recherche d'un subpath comme
qml/QtQuick/Controls/Styles/Desktop
) pour voir quels changements w.r.t. Windows et essayer d'adapter la solution. De mon côté, je vais tester le code sur mon Mac pour fournir une modification aborder cette question spécifique (évidemment, comme j'ai du temps libre).C'est tellement utile! Merci!!!!
OriginalL'auteur BaCaRoZzo
Merci beaucoup! J'ai résolu ce problème par le code suivant:
C'est la meilleure réponse. Merci pour cette!
OriginalL'auteur otashlanov
J'ai été en utilisant des approches comme ça, mais ils ont beaucoup de limitations avec
focus
de gestion et dez-index
de gestion.J'ai jusqu'à la fin avec la mise en œuvre de
ComboBox
qui se compose de 2 parties: un en-tête qui vous fait mettre quelque part et un élément déroulant qui vous créez dynamiquement. Ce dernier se compose d'unItem
couvrant tout (et de l'interception de la souris) et une liste déroulante qui est soigneusement placés au-dessous de l'en-tête.Code est assez massif pour inclus ici, donc vous pouvez voir les détails dans mon article sur le blog avec tout le code
OriginalL'auteur Ribtoks