Respostas:
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 QPalette
cores 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.
color
atributo é ineficaz. Só via HTML <font color="#FFFFFF">...</font>
eu era capaz de definir a cor da fonte (ao branco neste caso.
color: ;
como um 'reset' parece fazer isso, mas é uma boa prática ou existe um método melhor?
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
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 QLabel
e substituir o paintEvent()
método que preenche seu retângulo delimitador.
Hoje, abri qt-assistant
e 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 False
não fará com que funcione.
Saudações,
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);
}
<font/>
tag (e é algo mais familiar para as pessoas em HTML: D) e não apenas uma cor, portanto, oferece maior flexibilidade.
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.
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