Frage

Wie kann ich einstellen Farbe von Text und Hintergrund eines QLabel?

War es hilfreich?

Lösung

Der beste und empfohlene Weg ist Qt Style Sheet zu verwenden.

Um die Textfarbe und Hintergrundfarbe eines QLabel zu ändern, hier ist was ich tun würde:

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

Sie könnten auch Qt Style Sheets vermeiden, mit und die QPalette Farben Ihrer QLabel ändern, aber Sie könnten unterschiedliche Ergebnisse auf verschiedenen Plattformen und / oder Stile bekommen.

Als Qt Dokumentation heißt es:

Mit einem QPalette nicht zur Arbeit für alle Arten gewährleistet ist, weil Stil Autoren durch die verschiedenen Plattformen Richtlinien eingeschränkt sind und durch den native Thema Motor.

Aber man könnte 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, empfehle ich nicht die Palette zu verwenden und für Qt-Stylesheet gehen.

Andere Tipps

Sie können QPalette verwenden, aber Sie müssen setAutoFillBackground(true); setzen Hintergrundfarbe ermöglichen

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 unter Windows und Ubuntu, ich habe nicht mit einem anderen O gespielt.

Hinweis: Bitte finden Sie unter QPalette , Farbe Rolle Abschnitt für weitere Details

ich diese Antwort hinzufügen, weil ich denke, es ist für jedermann nützlich sein könnte.

Ich trete in das Problem der Einstellung RGBA Farben (das heißt, RGB-Farbe mit einem Alpha-Wert für Transparenz) für die Farbanzeige Etiketten in meiner Malerei Anwendung.

Wie ich über die erste Antwort kam, war ich nicht in der Lage eine RGBA-Farbe. Ich habe auch versucht, die Dinge wie:

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

wo color ist eine RGBA Farbe.

Also, meine schmutzige Lösung war QLabel und Überschreibung paintEvent() Methode füllt sein Begrenzungs rect zu verlängern.

Heute habe ich die qt-assistant öffnen und lesen Sie die Artreferenz Eigenschaftsliste . Affortunately, hat es ein Beispiel, das die folgenden Zustände:

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

Das ist, eröffnet meinen Kopf so etwas wie der Code unten dabei, als Beispiel:

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() Satz in False wird es nicht funktionieren.

Grüße,

Das einzige, was für mich gearbeitet wurde html.

Und ich fand es das viel leichter zu sein als jede der programmatischen Ansätze zu tun.

Der folgende Code ändert die Textfarbe basierend auf einem Parameter von einem Anrufer übergeben.

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

Der beste Weg, um jede Funktion in Bezug auf die Farben jedes Widget zu setzen, ist QPalette .

Und der einfachste Weg zu finden, was Sie suchen ist Qt Designer zu öffnen und die Palette eines QLabel und prüfen Sie den erzeugten Code festgelegt.

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top