QLabel: establece el color del texto y el fondo

180

¿Cómo configuro el color del texto y el fondo de a QLabel?

Regof
fuente

Respuestas:

272

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 QPalettecolores 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.

Jérôme
fuente
He estado usando el método setStyleSheet () y al menos en Qt 4.4 termina llamando a connect y en el material de Style Sheet y provoca un aumento en el uso de la memoria.
Dave Johansen el
Abrí un informe de error sobre el mayor uso de memoria que se puede encontrar aquí .
Dave Johansen el
El coloratributo es ineficaz. Solo a través de HTML <font color="#FFFFFF">...</font>pude configurar el color de la fuente (en blanco en este caso.
Paulo Carvalho
¿Hay alguna manera de especificar el color predeterminado (texto) del escritorio del usuario? Utilizandocolor: ; como "reinicio" parece hacerlo, pero ¿es una buena práctica o hay un método mejor?
AstroFloyd
38

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.

Shah-nawaj Shuhan
fuente
Este es el elemento individual más importante de CUALQUIER enfoque (excepto styleSheets.)
Eliyahu Skoczylas
3
Gracias por señalar que el autoFillBackground es un tema clave aquí. La respuesta aceptada arriba no funciona sin esa configuración.
BSD
20

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 colores un color RGBA.

Entonces, mi solución sucia era extender QLabely anularpaintEvent() método llenando su rectificador de límite.

Hoy, he abierto qt-assistanty 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,

Sebastian
fuente
14

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);
}
paie
fuente
Lo mismo aquí, ni QPalette ni las hojas de estilo funcionaron para mí, ¡muy molesto!
sé nada
Prefiero esta manera, ya que también le permite poner otras cosas elegantes dentro de la <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.
rbaleksandar
@iknownothing las hojas de estilo funcionan a través de QPalette ... Todo usa QPalette.
Victor Polevoy
13

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.

alisami
fuente
2
En el diseñador, haga clic en "Forma-> Ver código" para ver el código generado.
alisami
6

Este funciona perfecto

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

Ishan Fernando
fuente
1
Aunque se aprecia el código, siempre debe tener una explicación que lo acompañe. Esto no tiene que ser largo, pero se espera.
peterh - Restablecer Monica
Si bien este código funciona, hay algunas optimizaciones definidas <code> QColor color = QColorDialog :: getColor (QColor (Qt :: white), this, tr ("Select Color"); // use la función estática para seleccionar el color, el valor inicial es blanco </br> ui-> label-> setStyleSheet (QString ("QLabel {background-color:% 1; color: blue;}" "+ colcode +"; color: blue;} ") .arg ( color.name ()); // color.name devuelve una cadena con formato #RRGGBB </code>
Scott Aron Bloom