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 ?

134
demandé sur Andy M 2010-05-01 15:57:30

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.

213
répondu Jérôme 2015-08-17 08:23:46

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

28
répondu Shah-nawaj Shuhan 2014-04-14 16:41:10

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

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,

14
répondu Sebastian 2018-07-06 20:47:55

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

11
répondu alisami 2014-04-14 16:41:08

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);
}
10
répondu paie 2011-08-03 23:03:25

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

3
répondu Ishan Fernando 2016-01-01 21:30:16