QLabel: Legen Sie die Farbe von Text und Hintergrund fest

179

Wie stelle ich die Farbe des Textes und den Hintergrund eines ein QLabel?

Regof
quelle

Antworten:

272

Der beste und empfohlene Weg ist die Verwendung von Qt Style Sheet .

Um die Textfarbe und Hintergrundfarbe von a zu ändern QLabel, würde ich Folgendes tun:

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

Sie können auch die Verwendung von Qt-Stylesheets vermeiden und die QPaletteFarben Ihrer ändernQLabel , aber Sie erhalten möglicherweise unterschiedliche Ergebnisse auf verschiedenen Plattformen und / oder Stilen.

In der Qt-Dokumentation heißt es:

Die Verwendung einer QPalette funktioniert nicht garantiert für alle Stile, da Stilautoren 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 sich für Qt Style Sheet zu entscheiden.

Jérôme
quelle
Ich habe die setStyleSheet () -Methode verwendet und zumindest in Qt 4.4 führt sie dazu, dass connect und im Style Sheet-Material aufgerufen werden und die Speichernutzung zunimmt.
Dave Johansen
Ich habe einen Fehlerbericht über die erhöhte Speichernutzung geöffnet, den Sie hier finden .
Dave Johansen
Das colorAttribut ist unwirksam. Nur über HTML konnte <font color="#FFFFFF">...</font>ich die Schriftfarbe einstellen (in diesem Fall auf Weiß.
Paulo Carvalho
Gibt es eine Möglichkeit, die Standardfarbe (Textfarbe) des Desktops des Benutzers anzugeben? Die Verwendung color: ;als "Zurücksetzen" scheint dies zu tun, aber ist dies eine gute Vorgehensweise oder gibt es eine bessere Methode?
AstroFloyd
38

Sie können QPalette verwenden, müssen setAutoFillBackground(true);jedoch die Hintergrundfarbe 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

Shah-nawaj Shuhan
quelle
Dies ist das wichtigste Einzelelement eines jeden Ansatzes (außer styleSheets)
Eliyahu Skoczylas
3
Vielen Dank für den Hinweis, dass der autoFillBackground hier ein zentrales Thema ist. Die oben akzeptierte Antwort funktioniert ohne diese Einstellung nicht.
BSD
19

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

Ich gehe auf das Problem ein, RGBA- Farben ( dh RGB-Farben mit einem Alpha-Wert für Transparenz) für Farbanzeigeetiketten in meiner Malanwendung festzulegen.

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())

Wo colorist eine RGBA-Farbe?

Meine schmutzige Lösung bestand also darin, zu erweitern QLabelund zu überschreibenpaintEvent() Methode , indem ihr Begrenzungsrecht füllte.

Heute habe ich die Liste der Eigenschaften der Stilreferenzen geöffnet qt-assistantund gelesen . Glücklicherweise gibt es ein Beispiel, das Folgendes angibt:

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

Das öffnet mir den Kopf, wenn ich als Beispiel so etwas wie den folgenden Code 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 das setAutoFillBackground()Einstellen Falsenicht funktioniert.

Grüße,

Sebastian
quelle
14

Das einzige, was für mich funktioniert hat, war HTML.

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

Der folgende Code ändert die Textfarbe basierend auf einem Parameter, der von einem Aufrufer übergeben wird.

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);
}
paie
quelle
Gleich hier haben weder QPalette noch Stylesheets für mich funktioniert, sehr nervig!
Ich weiß nichts
Ich bevorzuge diesen Weg, da Sie damit auch einige andere ausgefallene <font/>Dinge in das Tag einfügen können (und HTML-Leuten eher vertraut sind: D) und nicht nur eine Farbe, wodurch Sie mehr Flexibilität erhalten.
Rbaleksandar
@iknownothing Stylesheets funktionieren über QPalette ... Alles verwendet QPalette.
Victor Polevoy
13

Der beste Weg, um eine Funktion in Bezug auf die Farben eines Widgets festzulegen, ist die Verwendung festzulegen, QPalette .

Der einfachste Weg, das Gesuchte zu finden, besteht darin, Qt Designer zu öffnen, die Palette eines QLabels festzulegen und den generierten Code zu überprüfen.

Alisami
quelle
2
Klicken Sie im Designer auf "Formular-> Code anzeigen", um den generierten Code anzuzeigen.
Alisami
6

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

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

Ishan Fernando
quelle
1
Obwohl der Code geschätzt wird, sollte er immer eine begleitende Erklärung enthalten. Das muss nicht lange dauern, wird aber erwartet.
Peterh - Wiedereinsetzung Monica
Während dieser Code funktioniert, gibt es einige definierte Optimierungen. <Code> QColor color = QColorDialog :: getColor (QColor (Qt :: white), this, tr ("Farbe auswählen"); // Verwenden Sie die statische Funktion, um die Farbe auszuwählen. Der Anfangswert ist weiß </ br> ui-> label-> setStyleSheet (QString ("QLabel {Hintergrundfarbe:% 1; Farbe: blau;}" "+ colcode +"; Farbe: blau;} ") .arg ( color.name ()); // color.name gibt eine #RGGB-formatierte Zeichenfolge </ code> zurück
Scott Aron Bloom