Ich möchte ein Kombinationsfeld erstellen, das einige mit Farben verbundene Inhalte auswählt. Ich möchte den Hintergrund des Inhalts die Farbe zeigen. Ich habe dieses Ziel erreicht:Wie kann ich die Kopffarbe eines Kombinationsfelds einstellen?
QList<QString> names;
QList<QColor> bgColors;
QList<QColor> fgColors;
QComboBox* colorComboBox = new QComboBox();
for(int i = 0; i < names.size(); ++i)
{
colorComboBox->addItem(names.at(i), bgColors.at(i));
const QModelIndex idx = colorComboBox->model()->index(i, 0);
colorComboBox->model()->setData(idx, bgColors.at(i), Qt::BackgroundColorRole);
colorComboBox->model()->setData(idx, fgColors.at(i), Qt::ForegroundRole);
}
Das Kombinationsfeld zeigt den Text, den ich will, mit der Hintergrundfarbe I (nicht so zart wie das ColorEditorFactory Beispiel wollen, die nur ein kleines Rechteck neben dem Text zeigt, aber das ist wie ich es wollte).
Was ich brauche:
Sobald eine Reihe/Farbe ausgewählt ist, würde ich die Combo-Box mag die Farbe zu zeigen. Wie jetzt, zeigt das Kombinationsfeld, wenn es geschlossen ist, den Text, aber nicht die Farbe.
Wie kann ich die Farbe des Kopfkombinationsfeld ändern? (Ich mam nennt es Header, aber es kann einen anderen Namen, nicht sicher - der Teil, der über der Tabelle zur Auswahl verwendet und wenn das Kombinationsfeld geschlossen ist)
Edit: Ich habe versucht, ein Stylesheet in einem Steckplatz zu setzen auf currentIndexChanged
:
setStyleSheet("QComboBox { color: " + fgColor +
"; background-color: " + bgColor + "; }");
Ergebnis: änderte er das gesamte Kombinationsfeld in dieser Farbe, die ursprünglichen Farben zu vergessen.
setStyleSheet("QComboBox:!on { color: " + fgColor +
"; background-color: " + bgColor + "; }");
Ergebnis: es die Farbe schön verändert, wenn nicht gewählt - aber das Highlight und die Header sind grau und schwer zu lesen, ich wünschte, ich es auch ändern könnte. Und wenn ich schwebe, ändert sich die gesamte Combo-Farbe zu der letzten, die ich gesetzt habe.
Die Antwort kann in Sheets sein - wenn ich herausfinden kann, was Eigentum an den Header gilt.
Das ist großartig! Ich hatte es schließlich mit Stylesheets funktioniert, aber ich denke, das ist einfacher. Ich kann die 'setStyleSheet (" QComboBox {border-radius: 1px;} ");' Anforderung einfach nicht verstehen - weil sie sowieso im Change-Slot überschrieben wird ... – Thalia
Ich auch nicht, aber merken Sie das Gleiche wie mich? Wenn Sie diese Zeile kommentieren, haben Sie den QComboBox-Text wieder hervorgehoben ... Ich habe noch nicht die Fähigkeiten, dieses Verhalten zu verstehen haha – IAmInPLS
Der Text in der QComboBox? das ist immer noch für mich markiert - jetzt, wo du es erwähnt hast, habe ich es in das slot style sheet eingefügt und es entfernt Hervorhebung !!!:-) Nochmals vielen Dank :-) – Thalia