Comment définir la couleur d'arrière-plan d'un widget comme une liste déroulante ou une boîte à double rotation?

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

  •  05-07-2019
  •  | 
  •  

Question

J'essaie de définir la couleur d'arrière-plan d'une double zone de rotation et je ne suis pas sûr de la fonction à utiliser.

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

Faites-moi savoir, quel est le moyen simple de changer la couleur de fond d'un QComboBox ou d'un QDoubleSpinBox ?

Était-ce utile?

La solution

L'utilisation d'une QPalette ne fonctionne pas pour tous les styles, car les auteurs de style sont limités par les directives des différentes plates-formes et par le moteur de thème natif.

Pour vous assurer que la couleur de fond sera correcte, nous vous suggérons d’utiliser le style Qt. Feuille . 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é un QSpinBox , mais je suppose que cela fonctionnera de la même manière!

Autres conseils

fhe est généralement correct, mais ne tient pas compte des widgets (tels que les sélecteurs en rotation et les boutons / comboboxes) qui utilisent un rôle d'arrière-plan différent dans la palette. Une solution plus générale pourrait ressembler à ceci:

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

Vous pouvez également consulter les descriptions des différents rôles de palette et déterminer celui que vous souhaitez, puis l'appliquer au widget contenant les autres éléments à modifier. Les modifications apportées à la palette doivent se propager aux widgets enfants.

En fait, si vous examinez la documentation Qt pour QPalette dans le cas d’un QComboBox, le rôle d’arrière-plan n’est probablement pas celui que vous souhaitez. Ce que vous voulez, c'est:

  

QPalette :: Base Utilisée principalement comme couleur d'arrière-plan pour les widgets de saisie de texte, mais peut également être utilisée pour d'autres travaux de peinture, tels que l'arrière-plan des listes déroulantes et les poignées de la barre d'outils. Il est généralement blanc ou d’une autre couleur claire.

Voici donc le code que j'utilise pour définir la couleur de fond d'une zone de liste déroulante que j'utilise afin de faire correspondre la couleur du widget sur lequel il se trouve:

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

Apparemment, à partir de Qt 4.1, vous devez définir this- > setAutoFillBackground (true); pour que la palette applique la couleur d'arrière-plan.

Alors que les réponses précédentes peuvent définir la couleur d'arrière-plan pour un QComboBox non modifiable, elles ne fonctionnent pas pour un QComboBox modifiable. Dans ce cas, vous devez dériver 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);

Construisez une palette bleue quel que soit le widget utilisé:

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

Je voudrais essayer quelque chose comme

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

Fonctionne bien pour moi!

Aucune réponse ne fonctionnait auparavant pour moi, mais j'ai fait un mélange de toutes les réponses et j'ai finalement travaillé sur Qt 5.12 :

QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top