godex qt qt4 qlabel

godex - qlabel pyqt5



QLabel: establece el color del texto y el fondo (6)

Este funciona perfectamente

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() método getColor() devuelve el color seleccionado. Puedes cambiar el color de la etiqueta usando la stylesheet

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


Agrego esta respuesta porque creo que podría ser útil para cualquiera.

Entro en el problema de configurar los colores RGBA (es decir, el color RGB con un valor Alpha para la transparencia) para las etiquetas de visualización en color en mi aplicación de pintura.

Cuando me encontré con la primera respuesta, no pude establecer un color RGBA. También he intentado cosas como:

myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())

donde el color es un color RGBA.

Entonces, mi sucia solución fue extender QLabel y anular el método paintEvent() llenando su rectificador.

Hoy, abrí el qt-assistant y leí la lista de propiedades de referencia de estilo . Afortunadamente, 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 un 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() establecido en False no lo hará funcionar.

Saludos,


La mejor manera de establecer 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 establecer la paleta de una QLabel y verificar el código generado.


La mejor y más recomendada manera es usar Qt Style Sheet .

Para cambiar el color del texto y el color de fondo de una QLabel , esto es lo que haría:

QLabel* pLabel = new QLabel; pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");

También podría evitar el uso de Qt Style Sheets y cambiar los colores de QPalette de su QLabel , pero podría obtener diferentes resultados en diferentes plataformas y / o estilos.

Como dice la documentación de Qt:

No se garantiza que usar QPalette funcione para todos los estilos, porque los autores de estilos están restringidos por las directrices 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 que no use la paleta e ir a la Hoja de Estilo de Qt.


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 aprobado 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); }


Puede usar QPalette, sin embargo, debe establecer 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 información.