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
?
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 !
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.
apparemment à partir de Qt 4.1, vous devez définir this->setAutoFillBackground( true );
pour que la palette applique la couleur de fond.
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);
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);
construire une palette qui est bleu peu importe ce que le widget réelle:
comboBox->setPalette( QPalette( Qt::blue ) );
j'essaierais quelque chose comme
QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
comboBox->setPalette( QPalette( Qt::blue ) );
, ça me va!