Comment définir la couleur du texte et de l'arrière-plan d'un QLabel
?
La meilleure façon recommandée consiste à utiliser Qt Style Sheet .
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 des plates-formes et/ou des styles différents.
Comme le dit la documentation Qt:
L'utilisation d'une QPalette n'est pas garantie pour tous les styles, car les auteurs de styles sont limités par les directives des différentes plates-formes et par le moteur de thème natif.
Mais vous pouvez faire quelque chose comme ça:
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 opter pour Qt Style Sheet.
Vous pouvez utiliser QPalette, mais vous devez définir setAutoFillBackground(true);
pour activer la couleur d'arrière-plan.
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 bien sous Windows et Ubuntu, je n'ai pas joué avec un autre système d'exploitation.
Remarque: veuillez vous reporter à la section QPalette , section relative au rôle de la 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 mise en RGBA couleurs (c'est-à-dire une couleur RVB avec une valeur Alpha pour la transparence) pour les étiquettes d'affichage couleur dans mon application de peinture.
Lorsque je suis tombé sur la première réponse, je n'ai pas pu définir de couleur RGBA. J'ai aussi essayé des choses comme:
myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())
où color
est une couleur RGBA.
Donc, ma solution sale consistait à étendre QLabel
et à remplacer la méthode paintEvent()
en remplissant son rectangle de délimitation.
Aujourd'hui, j'ai ouvert le qt-assistant
et lu le liste des propriétés de référence de style . Heureusement, il y a un exemple qui dit:
QLineEdit { background-color: rgb(255, 0, 0) }
Cela me donne l’esprit de faire 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 dans False
ne le fera pas fonctionner.
Cordialement,
La seule chose qui a fonctionné pour moi était le HTML.
Et j’ai trouvé que c’était beaucoup plus facile à faire qu’aucune des approches programmatiques.
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(QString& line, int level)
{
QTextCursor cursor = ui->messages->textCursor();
QString alertHtml = "<font color=\"DeepPink\">";
QString notifyHtml = "<font color=\"Lime\">";
QString infoHtml = "<font color=\"Aqua\">";
QString endHtml = "</font><br>";
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);
}
Le meilleur moyen de définir une fonctionnalité 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, de définir la palette d'un QLabel et de vérifier le code généré.
QColorDialog *dialog = new QColorDialog(this);
QColor color= dialog->getColor();
QVariant variant= color;
QString colcode = variant.toString();
ui->label->setStyleSheet("QLabel { background-color :"+colcode+" ; color : blue; }");
getColor()
cette méthode retourne la couleur sélectionnée. Vous pouvez changer la couleur de l'étiquette en utilisant stylesheet