39 Stimmen

Wie setze ich die Hintergrundfarbe eines Widgets wie eines Kombinationsfeldes oder eines Doppeldrehrades fest?

Ich versuche, die Hintergrundfarbe für einen Doppel-Spin-Box festzulegen, aber ich bin mir nicht sicher, welche Funktion ich verwenden sollte.

Ich habe eine Funktion namens SetBackgroundRole gesehen, die eine Qt::ColorRole akzeptiert, aber ich bin mir auch nicht sicher, wie ich diese verwenden soll.

Bitte lassen Sie mich wissen, wie man die Hintergrundfarbe eines QComboBox oder QDoubleSpinBox einfach ändern kann?

46voto

Er ist im Allgemeinen richtig, aber berücksichtigt nicht die Widgets (wie Drehfelder und Schaltflächen/Kombinationsfelder), die in der Palette eine andere Hintergrundrolle verwenden. Eine allgemeinere Lösung könnte so aussehen:

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

Alternativ können Sie sich die Beschreibungen der verschiedenen Palettenrollen ansehen und die gewünschte wählen, um sie dann auf das Widget anzuwenden, das die anderen ändern möchten. Die Farbänderungen der Palette sollten auf die untergeordneten Widgets übergehen.

41voto

Jérôme Punkte 25617

Die Verwendung eines QPalette garantiert nicht, dass es für alle Stile funktioniert, da die Style-Autoren durch die Richtlinien der verschiedenen Plattformen und durch den nativen Themen-Engine eingeschränkt sind.

Um sicherzustellen, dass Ihre Hintergrundfarbe korrekt ist, würde ich empfehlen, das Qt-Style-Sheet zu verwenden. Hier ist, was ich gemacht habe, um die Hintergrundfarbe eines QComboBox zu ändern:

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

Ich habe es speziell für ein QSpinBox nicht ausprobiert, aber ich denke, es wird genauso funktionieren!

8 Stimmen

Mit einem Stylesheet die Hintergrundfarbe festzulegen, ist nicht der richtige Ansatz, es sei denn, Sie sind auch bereit, die anderen Unterkontrollen in der QComboBox zu gestalten (d. h. Dropdown und Pfeil nach unten). Lesen Sie die Notiz aus der Qt-Dokumentation: "Bei komplexen Widgets wie QComboBox und QScrollBar müssen bei Anpassungen an einer Eigenschaft oder einem Unterkontrollbereich auch alle anderen Eigenschaften oder Unterkontrollbereiche angepasst werden." Link: doc.trolltech.com/4.5/stylesheet-customizing.html

0 Stimmen

Ich bekomme weiße Ränder oben und unten, wo die abgerundeten Ecken auf dem Mac sind.

14voto

Corwin Joy Punkte 625

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

QPalette::Base Wird hauptsächlich als Hintergrundfarbe für Texteingabewidgets verwendet, kann aber auch für andere Malereien verwendet werden - wie den Hintergrund von Kombinationsfeldlisten und Symbolleistenhandhaben. Es ist normalerweise weiß oder eine andere helle Farbe.

Hier ist also der Code, den ich verwende, um die Hintergrundfarbe eines Kombinationsfelds anzupassen, sodass sie der Farbe des Widgets entspricht, auf dem es sich befindet:

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

4voto

Dan Blanks Punkte 41

Während die vorherigen Antworten die Hintergrundfarbe für ein nicht editierbares QComboBox festlegen können, funktionieren sie nicht für ein editierbares QComboBox. In diesem Fall müssen Sie das verwendete QLineEdit-Widget ableiten und dessen Hintergrund zurücksetzen.

So habe ich es zum Laufen gebracht:

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

2voto

Marc Mutz - mmutz Punkte 23597

Erstellen Sie eine Palette, die unabhängig vom tatsächlichen Widget blau ist:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X