Antworten:
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 QPalette
Farben 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.
color
Attribut ist unwirksam. Nur über HTML konnte <font color="#FFFFFF">...</font>
ich die Schriftfarbe einstellen (in diesem Fall auf Weiß.
color: ;
als "Zurücksetzen" scheint dies zu tun, aber ist dies eine gute Vorgehensweise oder gibt es eine bessere Methode?
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
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 color
ist eine RGBA-Farbe?
Meine schmutzige Lösung bestand also darin, zu erweitern QLabel
und zu überschreibenpaintEvent()
Methode , indem ihr Begrenzungsrecht füllte.
Heute habe ich die Liste der Eigenschaften der Stilreferenzen geöffnet qt-assistant
und 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 False
nicht funktioniert.
Grüße,
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);
}
<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.
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.
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