Qt so ändern Sie die Hervorhebungsfarbe eines bestimmten QComboBox Element
Ich versuche, mich das highlight transparent für eine QComboBox. Die Farbe dieses QComboBox auch änderungen basierend auf dem ausgewählten index. Hier ist meine beste Lösung bisher:
switch(comboBox->currentIndex())
{
case 0:
comboBox->setStyleSheet("QWidget {color:black}");
break;
case 1:
comboBox->setStyleSheet("QWidget {background-color:red; color:white;}");
break;
case 2:
comboBox->setStyleSheet("QWidget {background-color:green; color:white;}");
break;
}
comboBox->setItemData(0, QColor(Qt::white), Qt::BackgroundRole);
comboBox->setItemData(0, QColor(Qt::black), Qt::ForegroundRole);
comboBox->setItemData(1, QColor(Qt::red), Qt::BackgroundRole);
comboBox->setItemData(1, QColor(Qt::white), Qt::ForegroundRole);
comboBox->setItemData(2, QColor(Qt::darkGreen), Qt::BackgroundRole);
comboBox->setItemData(2, QColor(Qt::white), Qt::ForegroundRole);
QPalette p = comboBox->palette();
p.setColor(QPalette::Highlight, Qt::transparent);
comboBox->setPalette(p);
p = comboBox->view()->palette();
p.setColor(QPalette::Highlight, Qt::transparent);
comboBox->view()->setPalette(p);
Das problem ist, dass, was Farbe der QComboBox aktuell ist, was die Farbe der Markierung wird bei der Auswahl eines Elements im popup. Ich möchte jeden QComboBox Element bleiben die gleiche Farbe. Die Bilder zeigen das problem, das ich habe.
- Ich verstehe nicht dein problem nicht ganz, kannst du sagen, welche Farbe die items "Keine änderung", "Aus" ein "Auf" sein sollte und was Sie jetzt sind (oder warum Ihre Bilder sind falsch)?
- Sie sollte rot sein. Sollte grün sein, und Nicht ändern, sollten die Standard-Farbe. Das highlight-color auf transparent gesetzt. Dies funktioniert für die combobox, aber wenn Sie die Auswahl Elemente in der combobox "transparent" gibt mir nicht die Ergebnisse, die ich erhofft. Sie sehen in den Bildern, die das ausgewählte Element aus der QAbstractItemView ist immer rot.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich die Frage verstehen, richtig Sie möchten, um vollständig zu entfernen hervorgehobene Farbe, so dass das Objekt unter Mauszeiger würde nur unterscheiden sich durch die Rahmen.
Den einen Weg, dies zu tun geht wie folgt: wir erstellen Klasse geerbt von
QItemDelegate
(Normalerweise einfachQItemDelegate
ist verantwortlich für die ZeichnungQComboBox
Elemente). Wir überschreiben die paint-Funktion wie diese:Im Grunde genommen sind wir nur mit normalen paint-Funktion Funktion aber behaupten, dass alle Elemente, die nicht
QStyle::State_Selected
denen geprüft wird, in mehreren Funktionen inQItemDelegate::paint
, vor allem indrawBackground
das leider nicht virtuell.Wenn wir nur mit
comboBox->setItemDelegate (new SelectionKillerDelegate)
um unsere Delegaten verwendet werden, anstelle von einfachenQItemDelegate
. Das ist alles.Die gute Sache ist, dass fokussierte Element wird ermittelt, indem
QStyle::State_HasFocus
so gepunkteten Rahmen für Element zeigte Mauszeiger noch sichtbar, auch mit dieser Delegat.