Respuestas:
La mejor forma recomendada es usar Qt Style Sheet .
Para cambiar el color del texto y el color de fondo de a QLabel
, esto es lo que haría:
QLabel* pLabel = new QLabel;
pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");
También puede evitar usar Qt Style Sheets y cambiar los QPalette
colores de su QLabel
, pero puede obtener resultados diferentes en diferentes plataformas y / o estilos.
Como dice la documentación de Qt:
El uso de una QPalette no garantiza que 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, sugiero no usar la paleta y buscar Qt Style Sheet.
color
atributo es ineficaz. Solo a través de HTML <font color="#FFFFFF">...</font>
pude configurar el color de la fuente (en blanco en este caso.
color: ;
como "reinicio" parece hacerlo, pero ¿es una buena práctica o hay un método mejor?
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 roles 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, color RGB con un valor Alfa para transparencia) para las etiquetas de visualización de color 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 era extender QLabel
y anularpaintEvent()
método llenando su rectificador de límite.
Hoy, he abierto qt-assistant
y leído la lista de propiedades de referencia de estilo . Afortunadamente, tiene un ejemplo que establece 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 setAutoFillBackground()
en cuenta que establece enFalse
no lo hará funcionar.
Saludos,
Lo ÚNICO que funcionó para mí fue html.
Y descubrí que es mucho más fácil de hacer que cualquiera de los enfoques programáticos.
El siguiente código cambia el color del texto en función de 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);
}
<font/>
etiqueta (y es algo más familiar para las personas HTML: D) y no solo un color, por lo tanto, le brinda una mayor flexibilidad.
La mejor manera de configurar cualquier característica con respecto a los colores de cualquier widget es usar QPalette .
Y la forma más fácil de encontrar lo que está buscando es abrir Qt Designer y configurar la paleta de un QLabel y verificar el código generado.
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()
El método devuelve el color seleccionado. Puede cambiar el color de la etiqueta usandostylesheet