QLabel: establece el color del texto y el fondo
¿Cómo configuro el color del texto y el fondo de un QLabel
?
La mejor y más recomendada forma es utilizar Qt Style Sheet. Documentos: Hoja de estilo Qt 5 , Hoja de estilo Qt 6 .
Para cambiar el color del texto y el color de fondo de un QLabel
, esto es lo que haría:
QLabel* pLabel = new QLabel;
pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");
También puede evitar el uso de hojas de estilo Qt y cambiar los QPalette
colores de su archivo QLabel
, pero puede obtener resultados diferentes en diferentes plataformas y/o estilos.
Como dice la documentación de Qt:
No se garantiza que el uso de una QPalette funcione para todos los estilos, porque los autores de estilos están restringidos por las pautas de las diferentes plataformas y por el motor de temas nativo.
Pero podrías hacer algo como esto:
QPalette palette = ui->pLabel->palette();
palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow);
palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow);
ui->pLabel->setPalette(palette);
Pero como dije, recomiendo encarecidamente no usar la paleta y optar por la hoja de estilo Qt.
Puede usar QPalette, sin embargo, debe configurarlo setAutoFillBackground(true);
para habilitar el color de fondo.
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");
Funciona bien en Windows y Ubuntu, no he jugado con ningún otro sistema operativo.
Nota: consulte QPalette , sección de función de color para obtener más detalles.
Agrego esta respuesta porque creo que podría ser útil para cualquiera.
Entro en el problema de configurar colores RGBA (es decir, colores RGB con un valor Alfa para transparencia) para etiquetas de visualización de colores en mi aplicación de pintura.
Cuando encontré la primera respuesta, no pude establecer un color RGBA. También he probado cosas como:
myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())
donde color
es un color RGBA.
Entonces, mi solución sucia fue extender QLabel
y anular paintEvent()
el método que llena su rectángulo delimitador.
Hoy, abrí qt-assistant
y leí la lista de propiedades de referencia de estilo . Lamentablemente, tiene un ejemplo que dice lo siguiente:
QLineEdit { background-color: rgb(255, 0, 0) }
Eso me abre la mente al hacer algo como el siguiente código, como ejemplo:
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+"); }")
Tenga en cuenta que setAutoFillBackground()
configurarlo False
no hará que funcione.
Saludos,
Lo ÚNICO que funcionó para mí fue html.
Y encontré que era mucho más fácil de hacer que cualquiera de los enfoques programáticos.
El siguiente código cambia el color del texto según un parámetro pasado por una persona que llama.
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);
}