QLabel: définir la couleur du texte et de l’arrière-plan

Comment définir la couleur du texte et l’arrière-plan d’un QLabel ?

Le meilleur moyen recommandé est d’utiliser la feuille de style Qt .

Pour changer la couleur du texte et la couleur de fond d’un QLabel , voici ce que je ferais:

 QLabel* pLabel = new QLabel; pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }"); 

Vous pouvez également éviter d’utiliser les feuilles de style Qt et modifier les couleurs QPalette de votre QLabel , mais vous pouvez obtenir des résultats différents sur différentes plates-formes et / ou styles.

Comme l’indique la documentation de Qt:

L’utilisation d’un QPalette n’est pas garantie 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.

Mais vous pourriez faire quelque chose comme ceci:

  QPalette palette = ui->pLabel->palette(); palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow); palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow); ui->pLabel->setPalette(palette); 

Mais comme je l’ai dit, je suggère fortement de ne pas utiliser la palette et de choisir la feuille de style Qt.

Vous pouvez utiliser QPalette, mais vous devez définir setAutoFillBackground(true); pour activer la couleur de fond

 QPalette sample_palette; sample_palette.setColor(QPalette::Window, Qt::white); sample_palette.setColor(QPalette::WindowText, Qt::blue); sample_label->setAutoFillBackground(true); sample_label->setPalette(sample_palette); sample_label->setText("What ever text"); 

Cela fonctionne très bien sur Windows et Ubuntu, je n’ai joué avec aucun autre système d’exploitation.

Note: S’il vous plaît voir QPalette , section de rôle de couleur pour plus de détails

J’ajoute cette réponse parce que je pense que cela pourrait être utile à n’importe qui.

J’interviens dans le problème de la définition des couleurs RGBA (c’est-à-dire des couleurs RVB avec une valeur Alpha pour la transparence) pour les étiquettes d’affichage couleur dans mon application de peinture.

Comme je suis tombé sur la première réponse, je n’ai pas pu définir une couleur RGBA. J’ai aussi essayé des choses comme:

myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())

où la color est une couleur RGBA.

Donc, ma QLabel solution était d’étendre la QLabel et override paintEvent() remplissant son rectangle englobant.

Aujourd’hui, j’ai ouvert l’ qt-assistant et lu la liste des propriétés de référence de style . Heureusement, il a un exemple qui indique ce qui suit:

QLineEdit { background-color: rgb(255, 0, 0) }

Thats ouvrir mon esprit en faisant quelque chose comme le code ci-dessous, à titre d’exemple:

 myLabel= QLabel() myLabel.setAutoFillBackground(True) # This is important!! color = QtGui.QColor(233, 10, 150) alpha = 140 values = "{r}, {g}, {b}, {a}".format(r = color.red(), g = color.green(), b = color.blue(), a = alpha ) myLabel.setStyleSheet("QLabel { background-color: rgba("+values+"); }") 

Notez que setAutoFillBackground() défini sur False ne le fera pas fonctionner.

Cordialement,

La meilleure façon de définir une caractéristique quelconque concernant les couleurs d’un widget consiste à utiliser QPalette .

Et le moyen le plus simple de trouver ce que vous recherchez est d’ouvrir Qt Designer et de définir la palette d’un QLabel et de vérifier le code généré.

La seule chose qui a fonctionné pour moi était le HTML.

Et j’ai trouvé que c’était beaucoup plus facile à faire que n’importe quelle approche programmatique.

Le code suivant modifie la couleur du texte en fonction d’un paramètre transmis par un appelant.

 enum {msg_info, msg_notify, msg_alert}; : : void bits::sendMessage(QSsortingng& line, int level) { QTextCursor cursor = ui->messages->textCursor(); QSsortingng alertHtml = ""; QSsortingng notifyHtml = ""; QSsortingng infoHtml = ""; QSsortingng endHtml = "
"; switch(level) { case msg_alert: line = alertHtml % line; break; case msg_notify: line = notifyHtml % line; break; case msg_info: line = infoHtml % line; break; default: line = infoHtml % line; break; } line = line % endHtml; ui->messages->insertHtml(line); cursor.movePosition(QTextCursor::End); ui->messages->setTextCursor(cursor); }

Celui-ci fonctionne parfaitement

 QColorDialog *dialog = new QColorDialog(this); QColor color= dialog->getColor(); QVariant variant= color; QSsortingng colcode = variant.toSsortingng(); ui->label->setStyleSheet("QLabel { background-color :"+colcode+" ; color : blue; }"); 

getColor() méthode getColor() renvoie la couleur sélectionnée. Vous pouvez changer la couleur de l’étiquette à l’aide de la stylesheet