Question

Comment puis-je définir la couleur du texte et le fond d'un QLabel?

Était-ce utile?

La solution

La meilleure et est recommandé d'utiliser Qt Style Sheet .

Pour modifier 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 des feuilles de style Qt et changer les couleurs de votre QPalette QLabel, mais vous pourriez obtenir des résultats différents sur différentes plates-formes et / ou styles.

Comme l'indique la documentation de Qt:

  

L'utilisation d'un QPalette est pas garanti pour tous les styles, parce que les auteurs de style sont limités par les lignes directrices des différentes plates-formes et par le moteur à thème natif.

Mais vous pouvez 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 le disais, je vous suggère fortement de ne pas utiliser la palette et aller pour Qt Style Sheet.

Autres conseils

Vous pouvez utiliser QPalette, mais vous devez définir setAutoFillBackground(true); pour activer les couleurs 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");

Il fonctionne très bien sur Windows et Ubuntu, je ne l'ai pas joué avec tout autre système d'exploitation.

Remarque: S'il vous plaît voir QPalette , section rôle couleur pour plus de détails

J'ajouter cette réponse parce que je pense qu'il pourrait être utile à tout le monde.

je entre dans le problème de la fixation des couleurs RVBA (qui est, de couleur RGB avec une alpha valeur pour la transparence) pour les étiquettes d'affichage des couleurs dans mon application peinture.

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

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

color est une couleur RGBA.

Alors, ma solution sale était d'étendre la méthode de QLabel et override paintEvent() remplir son rect englobante.

Aujourd'hui, j'ai ouvert le qt-assistant et lisez le propriétés de référence de style liste . Affortunately, il a un exemple qui indique ce qui suit:

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

Cest ouvrir mon esprit à faire quelque chose comme le code ci-dessous, un 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() ensemble dans False ne le faire fonctionner.

Cordialement,

La seule chose qui a fonctionné pour moi était html.

Et je trouve qu'il est le plus facile à faire que l'une des approches programmatiques.

Le code suivant modifie 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);
}

La meilleure façon de définir une fonction en ce qui concerne les couleurs de tout widget est à utiliser QPalette.

Et la meilleure façon de trouver ce que vous cherchez est d'ouvrir Qt Designer et définir la palette d'un QLabel et vérifier le code généré.

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; }");

Méthode de getColor() renvoie la couleur sélectionnée. Vous pouvez changer la couleur de l'étiquette en utilisant stylesheet

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top