QComboBox Stil für ausgewählten Elements in der Dropdown-Liste

Möchte ich den Stil der highlightation des ausgewählten Elements in der Dropdownliste der combobox-Komponente.

Den Unterschied zu anderen Fragen ist, dass ich nicht wollen, um Stil "ausgewählte" item " (schweben mit der Maus) .. ABER ich interessiere mich für das styling der bereits ausgewählten Artikel.

Standard ist eine Art ticker, die gemalt wird über den text. Ich möchte dem ausgewählten Element um text Fett und kein ticker-Bild.

Oder im schlimmsten Fall nur shifth der text nach rechts, um den ticker sichtbar richtig.

Was ich habe ist dieses:

QComboBox Stil für ausgewählten Elements in der Dropdown-Liste

Beachten Sie die 17th Punkt, der ticker über die Nummer 17.

Dies ist mein 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;
}

Ich versuche zu überschreiben das Element delagate:

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

zusammen mit

QComboBox QAbstractItemView::item:selected style 

Oder überschreiben Sie die Ansicht:

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);

aber in beiden Fällen völlig deaktiviert das markieren von ausgewählten Element (der 17-item)

UPDATE 1

Getestet habe ich eingestellt ::Element:stylesheet überprüft, aber es hat nicht geholfen:

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);

Auch ich habe dies nur Hinzugefügt, um die stylesheet-nur um sicher zu sein:

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

Das Ergebnis mit 17 Modus aktiviert war (das schwarz nur Mauszeiger):

QComboBox Stil für ausgewählten Elements in der Dropdown-Liste

UPDATE 2

Ok, ich war in der Lage zu ändern, das Gewicht der Schrift geprüft item, aber ich nicht entfernen, der blöde ticker von der Sache.. ich experimentierte mit meiner stylesheet-Datei, und ich fand heraus, dass diese beiden Selektoren sind verantwortlich für den Stil der ausgewählten Elemente highlightation:

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

Wenn ich entfernen Sie die ::item:aktiviert, dann ::item:aktiviert die nicht funktionieren (tut es nicht bolderise die geprüfte Position) und der ticker dissappears.

Auf Qt forum die Sie geraten, dass ich irgendwie verkürzt, der "Platz für icons der combobox".. kann ich nicht finden-der selector ist für das verantwortlich..

Habe ich das Gefühl, dass das Stylesheet ist schwarze Magie, und nur die choosen können verstehen, was im Innern passiert..

Nie getestet, aber haben Sie versucht: QComboBox QListView::item:checked { background-color: green; }?
Ich habe versucht, es hat nicht geklappt, aktualisiert die Frage.. danke
dein Vorschlag hat mir geholfen, aber ich habe es auf QWidget.. aber noch war ich nicht in der Lage, entfernen Sie den ticker..

InformationsquelleAutor nayana | 2015-04-29

Schreibe einen Kommentar