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
?
6 réponses
La meilleure façon et recommandée est d'utiliser Feuille de Style Qt .
Pour modifier la couleur du texte et la couleur d'arrière-plan 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 des feuilles de Style Qt et changer 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 Qt:
L'utilisation D'une QPalette n'est pas garantie pour tous les styles, car limité 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 d'opter pour la feuille de Style Qt.
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 sur Windows et Ubuntu, je n'ai joué avec aucun autre système d'exploitation.
Remarque: Veuillez consulter QPalette , section 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'entre dans le problème de la définition des couleurs RGBA (c'est-à-dire la couleur 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ù color
est une couleur RVBA.
Donc, ma solution sale était d'étendre QLabel
et remplacer paintEvent()
méthode remplissant son rect de délimitation.
Aujourd'hui, j'ai ouvert le 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) }
C'est 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 dans False
ne le fera pas fonctionner.
Cordialement,
La meilleure façon de définir une fonctionnalité concernant les couleurs d'un widget est d'utiliser QPalette .
Et le moyen le plus simple de trouver ce que vous cherchez 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 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 passé par un visiteur.
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);
}
Celui-ci fonctionne parfaitement
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()
méthode retourne la couleur sélectionnée.
Vous pouvez changer la couleur de l'étiquette en utilisant stylesheet