Risposte:
Il modo migliore e consigliato è usare il foglio di stile Qt .
Per cambiare il colore del testo e il colore di sfondo di un QLabel
, ecco cosa farei:
QLabel* pLabel = new QLabel;
pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");
Potresti anche evitare di usare i fogli di stile Qt e cambiare i QPalette
tuoi colori QLabel
, ma potresti ottenere risultati diversi su piattaforme e / o stili diversi.
Come afferma la documentazione di Qt:
L'uso di una QPalette non è garantito per tutti gli stili, poiché gli autori degli stili sono limitati dalle linee guida delle diverse piattaforme e dal motore del tema nativo.
Ma potresti fare qualcosa del genere:
QPalette palette = ui->pLabel->palette();
palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow);
palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow);
ui->pLabel->setPalette(palette);
Ma come ho detto, consiglio vivamente di non usare la tavolozza e scegliere il foglio di stile Qt.
color
attributo è inefficace. Solo tramite HTML <font color="#FFFFFF">...</font>
sono stato in grado di impostare il colore del carattere (in questo caso il bianco.
color: ;
come 'reset' sembra farlo, ma questa è una buona pratica o esiste un metodo migliore?
È possibile utilizzare QPalette, tuttavia è necessario impostare setAutoFillBackground(true);
per abilitare il colore di sfondo
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");
Funziona bene su Windows e Ubuntu, non ho giocato con nessun altro sistema operativo.
Nota: consultare QPalette , sezione ruolo colore per maggiori dettagli
Aggiungo questa risposta perché penso possa essere utile a chiunque.
Passo nel problema di impostare i colori RGBA (ovvero, il colore RGB con un valore alfa per la trasparenza) per le etichette con display a colori nella mia applicazione di pittura.
Quando ho trovato la prima risposta, non sono stato in grado di impostare un colore RGBA. Ho anche provato cose come:
myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())
dove color
è un colore RGBA.
Quindi, la mia soluzione sporca era estendere QLabel
e scavalcarepaintEvent()
metodo riempiendo il suo rettangolo di limitazione.
Oggi ho aperto qt-assistant
e letto l' elenco delle proprietà dei riferimenti di stile . Affortunatamente, ha un esempio che afferma quanto segue:
QLineEdit { background-color: rgb(255, 0, 0) }
Questo mi apre la mente nel fare qualcosa come il codice qui sotto, ad esempio:
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+"); }")
Nota che il setAutoFillBackground()
set in False
non lo farà funzionare.
Saluti,
L'unica cosa che ha funzionato per me era HTML.
E l'ho trovato molto più semplice da fare rispetto a qualsiasi approccio programmatico.
Il codice seguente modifica il colore del testo in base a un parametro passato da un chiamante.
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 (ed è qualcosa di più familiare alle persone HTML: D) e non solo un colore, quindi ti dà una maggiore flessibilità.
Il modo migliore per impostare qualsiasi funzione relativa ai colori di qualsiasi widget è usare QPalette .
E il modo più semplice per trovare quello che stai cercando è aprire Qt Designer e impostare la tavolozza di un QLabel e controllare il codice generato.
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()
Il metodo restituisce il colore selezionato. Puoi cambiare il colore dell'etichetta usandostylesheet