QLabel: couleur du texte et du fond
Question
Comment puis-je définir la couleur du texte et le fond d'un QLabel
?
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())
où 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);
}
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