Wie richte ich die Hintergrundfarbe eines Widgets wie Combobox oder Doppel-Spin-Box?

StackOverflow https://stackoverflow.com/questions/177778

  •  05-07-2019
  •  | 
  •  

Frage

Ich versuche, die Hintergrundfarbe für ein Doppeldrehfeld zu setzen, und ich bin nicht sicher, welche Funktion soll ich verwenden.

sah ich eine Funktion namens SetBackgroundRole, die ein Qt::ColorRole akzeptiert, aber ich bin nicht sicher, wie diese zu verwenden, als auch.

Bitte lassen Sie mich wissen, was der einfache Weg, um die Hintergrundfarbe einer QComboBox oder QDoubleSpinBox zu ändern?

War es hilfreich?

Lösung

Mit einem QPalette nicht für alle Stile arbeiten ist garantiert, weil Stil Autoren durch die verschiedenen Plattformen Richtlinien und durch die native Thema Motor beschränkt sind.

Um die Hintergrundfarbe korrekt sein wird sicherstellen, würde ich vorschlagen, den Qt Stil zu verwenden Blatt . Hier ist, was ich tat, die Hintergrundfarbe eines QComboBox zu ändern:

myComboBox->setStyleSheet("QComboBox { background-color: blue; }");

Ich habe nicht speziell versucht, für ein QSpinBox, aber ich denke, es wird die gleiche Arbeit!

Andere Tipps

FHE ist in der Regel korrekt, aber berücksichtigt nicht die Widgets (wie Drehfelder und Tasten / Comboboxen), die einen anderen Hintergrund Rolle in der Palette verwenden. Eine allgemeine Lösung wäre so etwas wie dies:

QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);

Alternativ können Sie die Beschreibungen der verschiedenen Palette Rollen schauen und die ein heraus Sie wollen, dann gilt es auf das Widget die anderen aus, die Sie geändert werden sollen. Die Palette Änderungen sollten an die Kinder-Widgets propagieren.

Eigentlich, wenn man sich die Qt-Dokumentation für QPalette im Fall einer QComboBox der Hintergrundrolle sehen ist wahrscheinlich nicht das, was Sie wollen. Was Sie wollen, ist:

  

QPalette :: Base Gebrauchte meist als Hintergrundfarbe für die Texteingabe Widgets, sondern kann auch für andere Malerei verwendet werden - wie der Hintergrund der Combobox Listen und Symbolleiste Griff Dropdown. Es ist in der Regel weiß oder eine andere Lichtfarbe.

So, hier ist der Code, den ich mit der Hintergrundfarbe eines Kombinationsfeld habe ich die Farbe des Widgets anpassen bin mit ihm auf:

QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);

Offenbar in Qt 4.1 und weiter, müssen Sie this->setAutoFillBackground( true ); für die Palette auf die Hintergrundfarbe zu übernehmen.

Während die bisherigen Antworten der Hintergrundfarbe für eine nicht editierbare QComboBox gesetzt werden, dass sie nicht für eine editierbare QComboBox arbeiten. Für diesen Fall müssen Sie den QLineEdit-Widget für die Bearbeitung und setzen ihren Hintergrund verwendet abzuleiten.

Hier ist, wie ich es an die Arbeit:

    QComboBox *myComboBox = new QComboBox();
    myComboBox->setEditable(true);
    QColor backColor = QColor(246, 230, 230);
    QLineEdit *lineEditor = myComboBox->lineEdit();
    QPalette pal = lineEditor->palette();
    pal.setColor(QPalette::Base, backColor);
    lineEditor->setPalette(pal);

Erstellen Sie eine Palette, die blau ist egal, was die tatsächliche widget:

comboBox->setPalette( QPalette( Qt::blue ) );

Ich würde versuchen, so etwas wie

QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
comboBox->setPalette( QPalette( Qt::blue ) );

Funktioniert gut für mich!

Nein, um zuvor arbeitete Antworten für mich, aber ich habe eine Mischung aus allen Antworten und schließlich arbeiteten auf Qt 5.12 :

QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top