QLabel: define a cor do texto e do plano de fundo

179

Como faço para definir a cor do texto e o plano de fundo de a QLabel?

Regof
fonte

Respostas:

272

A maneira melhor e recomendada é usar a folha de estilos Qt .

Para alterar a cor do texto e a cor de fundo de a QLabel, eis o que eu faria:

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

Você também pode evitar o uso de folhas de estilo Qt e alterar as QPalettecores do seu QLabel, mas poderá obter resultados diferentes em diferentes plataformas e / ou estilos.

Como a documentação do Qt indica:

Não é garantido que o uso de um QPalette funcione para todos os estilos, porque os autores de estilos são restritos pelas diretrizes das diferentes plataformas e pelo mecanismo de tema nativo.

Mas você poderia fazer algo assim:

 QPalette palette = ui->pLabel->palette();
 palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow);
 palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow);
 ui->pLabel->setPalette(palette);

Mas como eu disse, sugiro fortemente que não use a paleta e vá para a folha de estilos Qt.

Jérôme
fonte
Eu tenho usado o método setStyleSheet () e, pelo menos no Qt 4.4, ele acaba chamando connect e nas coisas da Folha de estilos, causando um aumento no uso de memória.
Dave Johansen
Abri um relatório de erro sobre o aumento do uso de memória, que pode ser encontrado aqui .
Dave Johansen
O coloratributo é ineficaz. Só via HTML <font color="#FFFFFF">...</font>eu era capaz de definir a cor da fonte (ao branco neste caso.
Paulo Carvalho
Existe uma maneira de especificar a cor padrão (texto) da área de trabalho do usuário? Usar color: ;como um 'reset' parece fazer isso, mas é uma boa prática ou existe um método melhor?
AstroFloyd 14/05/19
38

Você pode usar o QPalette, no entanto, você deve definir setAutoFillBackground(true);para ativar a cor de fundo

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 bem no Windows e no Ubuntu, não joguei com nenhum outro sistema operacional.

Nota: Consulte QPalette , seção de função de cores para obter mais detalhes

Shah-nawaj Shuhan
fonte
Este é o único elemento importante mais do que qualquer abordagem (exceto styleSheets.)
Eliyahu Skoczylas
3
Obrigado por apontar que o autoFillBackground é uma questão fundamental aqui. A resposta aceita acima não funciona sem essa configuração.
BSD
20

Acrescento esta resposta porque acho que pode ser útil para qualquer pessoa.

Eu me deparo com o problema de definir cores RGBA (ou seja, cores RGB com um valor Alpha para transparência) para etiquetas de exibição em cores no meu aplicativo de pintura.

Como me deparei com a primeira resposta, não consegui definir uma cor RGBA. Eu também tentei coisas como:

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

onde coloré uma cor RGBA.

Portanto, minha solução suja foi estender QLabele substituir o paintEvent()método que preenche seu retângulo delimitador.

Hoje, abri qt-assistante li a lista de propriedades de referência de estilo . Felizmente, ele tem um exemplo que afirma o seguinte:

QLineEdit { background-color: rgb(255, 0, 0) }

Isso me abre a mente para fazer algo como o código abaixo, como um exemplo:

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+"); }")

Observe que setAutoFillBackground()definir Falsenão fará com que funcione.

Saudações,

Sebastian
fonte
14

A única coisa que funcionou para mim foi o html.

E achei muito mais fácil do que qualquer uma das abordagens programáticas.

O código a seguir altera a cor do texto com base em um parâmetro passado por um chamador.

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
fonte
O mesmo aqui, nem o QPalette nem as folhas de estilo funcionaram para mim, muito irritantes!
sei nada
Eu prefiro assim, pois também permite que você coloque outras coisas sofisticadas dentro da <font/>tag (e é algo mais familiar para as pessoas em HTML: D) e não apenas uma cor, portanto, oferece maior flexibilidade.
rbaleksandar
As folhas de estilo @iknownothing funcionam com o QPalette ... Tudo usa o QPalette.
Victor Polevoy 11/08/16
13

A melhor maneira de definir qualquer recurso referente às cores de qualquer widget é usar o QPalette .

E a maneira mais fácil de encontrar o que você está procurando é abrir o Qt Designer e definir a paleta de um QLabel e verificar o código gerado.

alisami
fonte
2
No designer, clique em "Formulário-> Exibir código" para ver o código gerado.
Alisami 6/05
6

Este está funcionando perfeitamente

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()O método retorna a cor selecionada. Você pode alterar a cor da etiqueta usandostylesheet

Ishan Fernando
fonte
1
Embora o código seja apreciado, ele deve sempre ter uma explicação que o acompanha. Isso não precisa ser longo, mas é esperado.
peterh - Restabelece Monica
Enquanto esse código funciona, existem algumas otimizações definidas <code> QColor color = QColorDialog :: getColor (QColor (Qt :: white), this, tr ("Select Color"); // use a função estática para selecionar a cor, o valor inicial é branco </br> ui-> label-> setStyleSheet (QString ("QLabel {cor de fundo:% 1; cor: azul;}" "+ colcode +"; cor: azul;} ") .arg ( color.name ()); // color.name retornos uma #RRGGBB formatado seqüência </ code>
Scott Aron Bloom