212 votes

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

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

311voto

Jérôme Points 8970

Le meilleur moyen et le plus recommandé est d'utiliser Feuille de style Qt .

Pour modifier la couleur du texte et la couleur d'arrière-plan d'un fichier 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 l'attribut QPalette les couleurs de votre QLabel mais vous pouvez obtenir des résultats différents sur des plateformes et/ou des styles différents.

Comme l'indique la documentation de 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 plateformes et par le moteur de thème natif.

Mais vous pourriez 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 d'opter pour Qt Style Sheet.

0 votes

J'ai utilisé la méthode setStyleSheet() et, au moins dans Qt 4.4, elle finit par appeler connect et dans la feuille de style, ce qui entraîne une augmentation de l'utilisation de la mémoire.

0 votes

J'ai ouvert un rapport de bogue sur l'augmentation de l'utilisation de la mémoire qui se trouve à l'adresse suivante aquí .

0 votes

El color est inefficace. Uniquement via HTML <font color="#FFFFFF">...</font> J'ai pu définir la couleur de la police (en blanc dans ce cas).

56voto

Shah-nawaj Shuhan Points 126

Vous pouvez utiliser QPalette, mais vous devez définir les paramètres suivants 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");

Il fonctionne bien sous Windows et Ubuntu, je n'ai pas joué avec d'autres OS.

Note : Veuillez consulter QPalette Pour plus de détails, voir la section sur le rôle des couleurs.

0 votes

Il s'agit de l'élément unique le plus important de TOUTE approche (sauf les feuilles de style).

4 votes

Merci d'avoir souligné que l'autoFillBackground est un problème clé ici. La réponse acceptée ci-dessus ne fonctionne pas sans ce paramètre.

26voto

Sebastian Points 845

J'ajoute cette réponse parce que je pense qu'elle peut être utile à tout le monde.

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

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

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

donde color est une couleur RGBA.

Donc, ma sale solution était d'étendre QLabel et de passer outre paintEvent() en remplissant son rectangle de délimitation.

Aujourd'hui, j'ai ouvert le qt-assistant et lire le liste des propriétés de référence du style . Malheureusement, il contient un exemple qui stipule ce qui suit :

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

Cela m'a ouvert l'esprit pour 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() en False ne le fera pas fonctionner.

Regards,

14voto

paie Points 171

La SEULE chose qui a fonctionné pour moi est le html.

Et j'ai trouvé que c'était beaucoup plus facile à faire que toutes les approches programmatiques.

Le code suivant change la couleur du texte en fonction d'un paramètre passé 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);
}

0 votes

Même chose ici, ni la QPalette ni les feuilles de style n'ont fonctionné pour moi, très ennuyeux !

0 votes

Je préfère cette méthode car elle permet également de placer d'autres éléments fantaisistes à l'intérieur de la balise <font/> (et c'est quelque chose de plus familier pour les personnes qui utilisent le HTML :D) et pas seulement une couleur, ce qui vous donne une plus grande flexibilité.

0 votes

@iknownothing Les feuilles de style fonctionnent avec QPalette... Tout utilise QPalette.

13voto

alisami Points 254

La meilleure façon de définir une fonctionnalité concernant les couleurs d'un widget est d'utiliser la méthode suivante 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é.

2 votes

Dans le designer, cliquez sur "Form->View Code" pour voir le code généré.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X