QLabel: imposta il colore del testo e dello sfondo


180

Come posso impostare il colore del testo e lo sfondo di un QLabel?

Risposte:


272

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


Ho usato il metodo setStyleSheet () e almeno in Qt 4.4 finisce per chiamare connect e nelle cose del foglio di stile e causare un aumento dell'uso della memoria.
Dave Johansen,

Ho aperto una segnalazione di bug sull'aumento dell'utilizzo della memoria che può essere trovato qui .
Dave Johansen,

L' colorattributo è inefficace. Solo tramite HTML <font color="#FFFFFF">...</font>sono stato in grado di impostare il colore del carattere (in questo caso il bianco.
Paulo Carvalho,

Esiste un modo per specificare il colore (testo) predefinito del desktop dell'utente? L'uso color: ;come 'reset' sembra farlo, ma questa è una buona pratica o esiste un metodo migliore?
AstroFloyd

38

È 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


Questo è il singolo elemento più importante di QUALSIASI approccio (tranne i fogli di stile.)
Eliyahu Skoczylas

3
Grazie per aver sottolineato che AutoFillBackground è un problema chiave qui. La risposta accettata sopra non funziona senza tale impostazione.
BSD

20

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 QLabele scavalcarepaintEvent() metodo riempiendo il suo rettangolo di limitazione.

Oggi ho aperto qt-assistante 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 Falsenon lo farà funzionare.

Saluti,


14

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

Lo stesso qui, né QPalette né i fogli di stile hanno funzionato per me, molto fastidiosi!
so nulla del

Preferisco così perché ti consente anche di inserire alcune altre cose fantasiose all'interno del <font/>tag (ed è qualcosa di più familiare alle persone HTML: D) e non solo un colore, quindi ti dà una maggiore flessibilità.
rbaleksandar,

I fogli di stile @iknownothing funzionano con QPalette ... Tutto utilizza QPalette.
Victor Polevoy,

13

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.


2
In Designer, fai clic su "Modulo-> Visualizza codice" per visualizzare il codice generato.
alisami,

6

Questo funziona perfettamente

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


1
Sebbene il codice sia apprezzato, dovrebbe sempre avere una spiegazione di accompagnamento. Questo non deve essere lungo, ma è previsto.
Peter - Ripristina Monica il

Mentre questo codice funziona, ci sono alcune ottimizzazioni definite <code> QColor color = QColorDialog :: getColor (QColor (Qt :: white), this, tr ("Select Color"); // usa la funzione statica per selezionare il colore, il valore iniziale è bianco </br> ui-> label-> setStyleSheet (QString ("QLabel {background-color:% 1; color: blue;}" "+ colcode +"; color: blue;} ") .arg ( color.name ()); // color.name restituisce una stringa formattata #RRGGBB </code>
Scott Aron Bloom
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.