Comment définir la couleur de fond d'un widget comme combobox ou double spin box?

j'essaie de définir la couleur de fond pour une double boîte de spin, et je ne suis pas sûr de quelle fonction je devrais utiliser.

j'ai vu une fonction appelée SetBackgroundRole qui accepte un Qt::ColorRole , mais je ne suis pas sûr de savoir comment l'utiliser ainsi.

faites-moi savoir, quelle est la façon simple de changer la couleur de fond d'un QComboBox ou QDoubleSpinBox ?

32
demandé sur demonplus 2008-10-07 13:41:28

8 réponses

utiliser un QPalette n'est pas garanti pour fonctionner pour tous les styles, parce que les auteurs de style sont limités par les directives des différentes plates-formes et par le moteur de thème natif.

pour être sûr que votre couleur de fond sera correcte, je vous conseille d'utiliser la feuille de Style Qt . Voici ce que j'ai fait pour changer la couleur de fond d'un QComboBox :

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

Je n'ai pas spécifiquement essayé pour un QSpinBox , mais je suppose que ça marchera la même chose !

35
répondu Jérôme 2015-07-24 06:55:41

fhe est généralement correct, mais ne tient pas compte des widgets (comme les boîtes de spin et les boutons/comboboxes) qui utilisent un rôle de fond différent dans la palette. Une solution plus générale serait quelque chose comme ceci:

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

alternativement, vous pouvez regarder dans les descriptions des différents rôles de palette et de comprendre celui que vous voulez, puis l'appliquer au widget contenant les autres que vous voulez changer. Les changements de palette devraient se propager à la widgets pour enfants.

42
répondu Caleb Huitt - cjhuitt 2008-10-07 13:49:00

apparemment à partir de Qt 4.1, vous devez définir this->setAutoFillBackground( true ); pour que la palette applique la couleur de fond.

11
répondu shake 2009-11-04 19:55:36

en fait, si vous regardez les docs Qt pour QPalette dans le cas D'un QComboBox, le rôle de fond n'est probablement pas ce que vous voulez. Ce que vous voulez est:

QPalette::Base utilisée principalement comme couleur d'arrière - plan pour les widgets d'entrée de texte, mais peut également être utilisé pour d'autres peintures-comme l'arrière-plan de combobox drop down listes et poignées de barre d'outils. Il est généralement blanc ou une autre couleur de lumière.

donc voici le code que j'utilise pour définir la couleur de fond d'une boîte bascule que j'utilise pour correspondre à la couleur du widget qu'il est sur:

QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
11
répondu Corwin Joy 2010-06-02 16:57:59

alors que les réponses précédentes peuvent définir la couleur de fond pour un QComboBox non éditable , elles ne fonctionnent pas pour un QComboBox éditable . Dans ce cas, vous devez calculer le widget QLineEdit utilisé pour l'édition et réinitialiser son arrière-plan.

Voici comment je l'ai fait fonctionner:

    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);
3
répondu Dan Blanks 2015-07-24 06:56:56

construire une palette qui est bleu peu importe ce que le widget réelle:

comboBox->setPalette( QPalette( Qt::blue ) );
1
répondu Marc Mutz - mmutz 2009-07-26 11:04:46

j'essaierais quelque chose comme

QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
0
répondu fhe 2008-10-07 09:51:02
comboBox->setPalette( QPalette( Qt::blue ) );

, ça me va!

0
répondu Rodrigo Haas 2011-09-13 18:07:49