Réponses:
La meilleure manière recommandée est d'utiliser la feuille de style Qt .
Pour changer 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 les feuilles de style Qt et changer les QPalette
couleurs de votre QLabel
, mais vous pourriez 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 de fonctionner 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 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.
color
attribut est inefficace. Uniquement via HTML, <font color="#FFFFFF">...</font>
j'ai pu définir la couleur de la police (en blanc dans ce cas.
color: ;
comme une «réinitialisation» semble le faire, mais est-ce une bonne pratique ou existe-t-il une meilleure méthode?
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 des rôles de couleur pour plus de détails
J'ajoute cette réponse parce que je pense qu'elle pourrait être utile à n'importe qui.
J'entre dans le problème de la définition des couleurs RGBA (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 une couleur RGBA. J'ai également essayé des choses comme:
myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())
où color
est une couleur RGBA.
Donc, ma solution sale était d'étendre QLabel
et de remplacer la paintEvent()
méthode remplissant son rectangle de délimitation.
Aujourd'hui, j'ai ouvert 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) }
Cela m'ouvre l'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 le setAutoFillBackground()
paramétrage False
ne le fera pas fonctionner.
Cordialement,
La SEULE chose qui a fonctionné pour moi était le 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 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);
}
<font/>
balise (et c'est quelque chose de plus familier aux gens HTML: D) et pas seulement une couleur, donc cela vous donne une plus grande flexibilité.
La meilleure façon de définir une fonctionnalité concernant les couleurs de tout widget est d'utiliser QPalette .
Et le moyen le plus simple de trouver ce que vous recherchez est d'ouvrir Qt Designer et de définir la palette d'un QLabel et de vérifier le code généré.
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()
renvoie la couleur sélectionnée. Vous pouvez changer la couleur de l'étiquette en utilisantstylesheet