QLabel: establece el color del texto y el fondo

Resuelto Regof asked hace 14 años • 6 respuestas

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

Regof avatar May 01 '10 18:05 Regof
Aceptado

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

Jérôme avatar May 03 '2010 06:05 Jérôme

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.

Shah-nawaj Shuhan avatar Jul 19 '2012 23:07 Shah-nawaj Shuhan

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

Entonces, mi solución sucia fue extender QLabely anular paintEvent()el método que llena su rectángulo delimitador.

Hoy, abrí qt-assistanty 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 Falseno hará que funcione.

Saludos,

Sebastian avatar Jul 29 '2011 16:07 Sebastian

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);
}
paie avatar Aug 03 '2011 23:08 paie