2015-04-29 1 views
6

Je veux styliser la surbrillance de l'élément choisi dans la liste déroulante de la zone de liste déroulante. La différence par rapport aux autres questions est que je ne veux pas styliser l'élément "sélectionné" (plané avec la souris). MAIS Je suis intéressé par le style de l'élément déjà choisi.Style QComboBox pour l'élément choisi dans la liste déroulante

La valeur par défaut est une sorte de ticker qui est peint sur le texte. Je veux que l'élément choisi ait du texte en gras et aucune image de ticker.

Ou dans le pire des cas, juste shifth le texte à droite pour rendre le symbole visible correctement.

Ce que j'est ceci:

enter image description here

avis le 17 élément qui a ticker sur le nombre 17.

Ceci est mon stylesheet:

QComboBox 
{ 
    subcontrol-origin: padding; 
    subcontrol-position: top right; 
    selection-background-color: #111; 
    selection-color: yellow; 
    color: white; 
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #565656, stop: 0.1 #525252, stop: 0.5 #4e4e4e, stop: 0.9 #4a4a4a, stop: 1 #464646); 
    border-style: solid; 
    border: 1px solid #1e1e1e; 
    border-radius: 5; 
    padding: 1px 0px 1px 20px; 
} 


QComboBox:hover, QPushButton:hover 
{ 
    border: 1px solid yellow; 
    color: white; 
} 

QComboBox:editable { 
    background: red; 
    color: pink; 
} 

QComboBox:on 
{ 
    padding-top: 0px; 
    padding-left: 0px; 
    color: white; 
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #2d2d2d, stop: 0.1 #2b2b2b, stop: 0.5 #292929, stop: 0.9 #282828, stop: 1 #252525); 
    selection-background-color: #ffaa00; 
} 

QComboBox:!on 
{ 
    color: white; 
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #666, stop: 0.1 #555, stop: 0.5 #555, stop: 0.9 #444, stop: 1 #333); 
} 

QComboBox QAbstractItemView 
{ 
    border: 2px solid darkgray; 
    color: black; 
    selection-background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #111, stop: 1 #333); 
} 

QComboBox::drop-down 
{ 
    subcontrol-origin: padding; 
    subcontrol-position: top right; 
    width: 15px; 
    color: white; 
    border-left-width: 0px; 
    border-left-color: darkgray; 
    border-left-style: solid; /* just a single line */ 
    border-top-right-radius: 3px; /* same radius as the QComboBox */ 
    border-bottom-right-radius: 3px; 
    padding-left: 10px; 
} 

QComboBox::down-arrow, QSpinBox::down-arrow, QTimeEdit::down-arrow, QDateEdit::down-arrow 
{ 
    image: url(:/icons/down_arrow.png); 
    width: 7px; 
    height: 5px; 
} 

Je tentais pour remplacer l'élément delagate:

ui->modeComboBox->setItemDelegate(new QStyledItemDelegate()); 

avec

QComboBox QAbstractItemView::item:selected style 

Ou passer outre la vue:

QListView * listView = new QListView(ui->modeComboBox); 

listView->setStyleSheet("QListView::item {        \ 
         border-bottom: 5px solid white; margin:3px; } \ 
         QListView::item:selected {      \ 
         border-bottom: 5px solid black; margin:3px; \ 
         color: black;         \ 
         }"); 
ui->modeComboBox->setView(listView); 

mais dans les deux cas, cela désactive totalement le point culminant de l'article choosed (qui est 17 article)

MISE À JOUR 1

J'ai testé à set :: item: checked stylesheet mais il n'a pas aidé:

QListView * listView = new QListView(ui->modeComboBox); 
listView->setStyleSheet("QListView::item {        \ 
         border-bottom: 5px solid white; margin:3px; } \ 
         QListView::item:selected {      \ 
         border-bottom: 5px solid black; margin:3px; \ 
         color: black; }        \ 
         QListView::item:checked {      \ 
         background-color: green;      \ 
         color: green;}" 
         ); 
ui->modeComboBox->setView(listView); 

Aussi je a ajouté à la feuille de style juste pour être sûr:

QComboBox QListView::item:checked { 
background-color: green; 
} 

Le résultat avec le mode 17 vérifié était (le noir est tout simplement vol stationnaire de la souris):

enter image description here

MISE À JOUR 2

Ok, je pouvais ch ANGE le poids de la police de l'élément vérifié, mais je ne peux pas enlever le symbole stupide de l'élément .. J'ai expérimenté avec mon fichier stylesheet et j'ai découvert que ces deux sélecteurs sont responsables pour le style des éléments cochés highlightation:

QWidget:item:selected 
{ 
    border: 0px solid #999900; 
    background: transparent; 
} 
QWidget:item:checked 
{ 
    font-weight: bold; 
} 

Si je supprime le :: item: sélectionné, alors :: item: checked ne fonctionne pas (il ne sépare pas l'item coché) et le ticker disparaît.

Sur le forum de Qt ils ont conseillé que je raccourcis en quelque sorte "l'espace pour des icônes de combobox" .. Je ne peux pas trouver le sélecteur qui est responsable de cela ..

J'ai le sentiment que la feuille de style est la magie noire et seul le choosed peut comprendre ce qui se passe à l'intérieur ..

+1

jamais testé mais ont vous avez essayé: 'QComboBox QListView :: item: checked {background-color: green; } '? – Iuliu

+0

@iuliu je l'ai essayé n'a pas travaillé, mis à jour la question .. merci – nayana

+0

@Iuliu votre suggestion m'a aidé, mais je l'ai mis sur QWidget .. mais encore je ne pouvais pas retirer le téléscripteur .. – nayana

Répondre

2

Ok après beaucoup de lutte, je fait une solution de contournement .. ce ne est pas mieux, ce ne est pas bon, mais il semble ok ..

I a ajouté l'effet gras de cette façon (il affecte d'autres widgets comme éléments de menu cochables, mais je peux vivre avec ça):

QWidget:item:selected 
{ 
    border: 0px solid #999900; 
    background: transparent; 
} 
QWidget:item:checked 
{ 
    font-weight: bold; 
} 

Puis, quand je suis en ajoutant des articles I suis des espaces pré-dans leur texte afin de le déplacer t o le droit .. J'essayais tellement de choses, mais rien n'a affecté le QAbstractItemView à l'intérieur.

Ceci est le résultat:

enter image description here

-3

Cela a fonctionné pour moi !:

myComboBox->setStyleSheet("QListView{color:black; background-color:white;}"); 
+0

cela ne semble pas vouloir mettre en évidence les éléments * sélectionnés * - il va juste mettre tout le texte en noir et en fond blanc – nayana

2

j'eu du succès avec sélecteurs de stylesheet moins spécifiques et "padding-left":

QComboBox:item { 
    padding-left: 20px; /* move text right to make room for tick mark */ 
} 
QComboBox:item:selected { 
    padding-left: 20px; /* move text right to make room for tick mark */ 
    border: 2px solid black; 
} 
QComboBox:item:checked { 
    padding-left: 20px; /* move text right to make room for tick mark */ 
    font-weight: bold; 
} 

(probablement une duplication inutile dans cela aussi!)

+0

Je pense que j'ai essayé cela .. peut-être dans Qt plus récent son fonctionnement correctement .. Cependant, ce que je voulais réaliser était d'avoir seulement gras et non ticker à tous - mais si cela fonctionne sa meilleure solution que d'ajouter des espaces (je n'ai pas le temps de vérifier votre solution), peut-être si quelqu'un ici peut l'essayer au moins et donner des commentaires .. – nayana

+0

Cela résout le problème mais il a créé un nouveau (Qt 5.9.2). La hauteur de chaque élément prend la moitié de la hauteur de l'écran. Je dois ajouter une hauteur maximale ... – firebird631

1

Je sais qu'il est très tard, mais pour les personnes ayant le même problème: je trouve cela à une autre question ici: Not able to hide Choice-Indicator of the QComboBox

Cela devrait masquer l'indicateur/cocher:

QComboBox::indicator{ 
    background-color:transparent; 
    selection-background-color:transparent; 
    color:transparent; 
    selection-color:transparent; 
} 
+0

Ca a l'air vraiment bien, mais je n'ai plus le projet pour tester ça .. donc juste upvote – nayana