wake-up-neo.com

QLabel: Stellen Sie die Farbe von Text und Hintergrund ein

Wie stelle ich die Textfarbe und den Hintergrund eines QLabel ein?

153
Regof

Die beste und empfohlene Methode ist Qt Style Sheet .

So ändern Sie die Text- und Hintergrundfarbe eines QLabel:

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

Sie könnten auch die Verwendung von Qt-Stylesheets vermeiden und die QPalette -Farben Ihres QLabel ändern, aber Sie erhalten möglicherweise unterschiedliche Ergebnisse auf verschiedenen Plattformen und/oder Stilen.

In der Qt-Dokumentation heißt es:

Es kann nicht garantiert werden, dass die Verwendung einer QPalette für alle Stile funktioniert, da die Autoren von Stilen durch die Richtlinien der verschiedenen Plattformen und durch die native Theme-Engine eingeschränkt sind.

Aber Sie könnten so etwas tun:

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

Aber wie gesagt, ich empfehle dringend, die Palette nicht zu verwenden und Qt Style Sheet zu wählen.

242
Jérôme

Sie können QPalette verwenden, müssen jedoch setAutoFillBackground(true); einstellen, um die Hintergrundfarbe zu aktivieren

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

Es funktioniert gut unter Windows und Ubuntu, ich habe mit keinem anderen Betriebssystem gespielt.

Hinweis: Weitere Informationen finden Sie im Abschnitt QPalette , Farbrolle

32

Ich füge diese Antwort hinzu, weil ich denke, dass sie für jeden nützlich sein könnte.

Ich beschäftige mich mit der Einstellung von RGBA Farben (dh RGB-Farbe mit einem Alpha-Wert für Transparenz) für Farbdisplay-Etiketten in meiner Malanwendung.

Als ich auf die erste Antwort stieß, konnte ich keine RGBA-Farbe einstellen. Ich habe auch Dinge ausprobiert wie:

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

dabei ist color eine RGBA-Farbe.

Also bestand meine schmutzige Lösung darin, die QLabel -Methode zu erweitern und die paintEvent() -Methode zu überschreiben, die das umgebende Rect füllt.

Heute habe ich den qt-assistant Geöffnet und die Liste der Stileigenschaften gelesen. Zum Glück gibt es ein Beispiel, das folgendes besagt:

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

Das öffnet meinen Geist, wenn ich etwas wie den folgenden Code als Beispiel mache:

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

Beachten Sie, dass setAutoFillBackground() in False nicht funktioniert.

Grüße,

17
Sebastian

Das einzige, was bei mir funktioniert hat, war HTML.

Und ich fand es viel einfacher als alle programmatischen Ansätze.

Der folgende Code ändert die Textfarbe basierend auf einem von einem Aufrufer übergebenen Parameter.

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

Die beste Möglichkeit, Funktionen in Bezug auf die Farben eines Widgets festzulegen, ist die Verwendung von QPalette .

Am einfachsten finden Sie, wonach Sie suchen, indem Sie Qt Designer öffnen, die Palette eines QLabels festlegen und den generierten Code überprüfen.

13
alisami

Dieser arbeitet perfekt

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

Die Methode getColor() gibt die ausgewählte Farbe zurück. Sie können die Etikettenfarbe mit stylesheet ändern.

4
Ishan Fernando