Domanda

Come faccio a impostare il colore del testo e dello sfondo di un QLabel?

È stato utile?

Soluzione

Il modo migliore e più consigliato è quello di utilizzare Qt Style Sheet .

Per modificare il colore del testo e il colore di sfondo di un QLabel, qui è quello che vorrei fare:

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

Si potrebbe anche evitare l'uso di fogli di stile Qt e modificare i colori del vostro QPalette QLabel, ma si potrebbe ottenere risultati diversi su diverse piattaforme e / o stili.

Come Qt documentazione afferma:

  

Utilizzando un QPalette non è garantito il funzionamento per tutti gli stili, perché gli autori di stile sono limitate dalle linee guida delle diverse piattaforme e dal motore tema natale.

Ma si potrebbe fare qualcosa di simile:

 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, vi consiglio vivamente di non utilizzare la tavolozza e andare per Qt Style Sheet.

Altri suggerimenti

È possibile utilizzare QPalette, tuttavia è necessario impostare setAutoFillBackground(true); per consentire 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 qualsiasi altro sistema operativo.

Nota: Si prega di consultare QPalette , sezione ruolo colori per maggiori dettagli

I aggiungere questa risposta perché penso che potrebbe essere utile a nessuno.

Io passo nel problema di impostazione RGBA colori (che è, di colore RGB con una valore alfa per la trasparenza) per le etichette display a colori nella mia applicazione pittura.

Come mi sono imbattuto la prima risposta, non sono riuscito a impostare un colore RGBA. Ho anche provato le cose come:

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

dove color è un colore RGBA.

Quindi, la mia soluzione sporca era di estendere il metodo QLabel e di override paintEvent() riempiendo la sua delimitazione rett.

Oggi, ho aprire il qt-assistant e leggere il proprietà di riferimento stile di elenco . Affortunately, ha un esempio che indica quanto segue:

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

Questo è aprire la mia mente a fare qualcosa di simile il codice di seguito, a titolo di 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+"); }")

Si noti che insieme setAutoFillBackground() in False non sarà farlo funzionare.

Saluti,

L'unica cosa che ha funzionato per me è stato html.

E ho trovato ad essere il più facile da fare che qualsiasi degli approcci programmatici.

Il codice seguente cambia il colore del testo sulla base di 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);
}

Il modo migliore per impostare qualsiasi funzione per quanto riguarda i colori di qualsiasi widget è di utilizzare QPalette .

E il modo più semplice per trovare quello che state cercando è quello di aprire Qt Designer e impostare la tavolozza di un QLabel e controllare il codice generato.

perfetto

Questo funziona

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

metodo getColor() restituisce il colore selezionato. È possibile modificare il colore dell'etichetta utilizzando stylesheet

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top