web-dev-qa-db-fra.com

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

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

153
Regof

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.

242
Jérôme

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.

32
Shah-nawaj Shuhan

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())

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,

17
Sebastian

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);
}
14
paie

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é.

13
alisami

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() cette méthode retourne la couleur sélectionnée. Vous pouvez changer la couleur de l'étiquette en utilisant stylesheet

4
Ishan Fernando