Odpowiedzi:
Najlepszym i zalecanym sposobem jest użycie arkusza stylów Qt .
Aby zmienić kolor tekstu i kolor tła litery a QLabel
, oto co powinienem zrobić:
QLabel* pLabel = new QLabel;
pLabel->setStyleSheet("QLabel { background-color : red; color : blue; }");
Możesz również uniknąć używania arkuszy stylów Qt i zmienić QPalette
kolory QLabel
, ale możesz uzyskać różne wyniki na różnych platformach i / lub stylach.
Jak stwierdza dokumentacja Qt:
Nie ma gwarancji, że używanie QPalette będzie działać dla wszystkich stylów, ponieważ autorzy stylów są ograniczeni przez wytyczne różnych platform i przez natywny silnik motywów.
Ale możesz zrobić coś takiego:
QPalette palette = ui->pLabel->palette();
palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow);
palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow);
ui->pLabel->setPalette(palette);
Ale jak powiedziałem, zdecydowanie sugeruję, aby nie używać palety i wybrać arkusz stylów Qt.
color
Cechą jest nieskuteczne. Tylko przez HTML <font color="#FFFFFF">...</font>
udało mi się ustawić kolor czcionki (w tym przypadku na biały.
color: ;
Wydaje się, że użycie jako „resetowania” działa, ale czy jest to dobra praktyka, czy też jest lepsza metoda?
Możesz używać QPalette, jednak musisz setAutoFillBackground(true);
włączyć kolor tła
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");
Działa dobrze na Windows i Ubuntu, nie grałem z żadnym innym systemem operacyjnym.
Uwaga: Więcej informacji można znaleźć w sekcji QPalette , sekcja dotycząca roli kolorów
Dodaję tę odpowiedź, ponieważ myślę, że może się to przydać każdemu.
Wchodzę w problem ustawienia kolorów RGBA (czyli koloru RGB z wartością Alpha dla przezroczystości) dla kolorowych etykiet wyświetlanych w mojej aplikacji do malowania.
Kiedy natknąłem się na pierwszą odpowiedź, nie byłem w stanie ustawić koloru RGBA. Próbowałem też takich rzeczy jak:
myLabel.setStyleSheet("QLabel { background-color : %s"%color.name())
gdzie color
jest kolor RGBA.
Więc moim brudnym rozwiązaniem było rozszerzenie QLabel
i zastąpieniepaintEvent()
metody wypełniania jej prostego ograniczającego.
Dzisiaj otworzyłem qt-assistant
i przeczytałem listę właściwości odwołań do stylu . Na szczęście ma przykład, który stwierdza:
QLineEdit { background-color: rgb(255, 0, 0) }
To otwiera mój umysł, robiąc coś takiego jak poniższy kod, jako przykład:
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+"); }")
Pamiętaj, że setAutoFillBackground()
ustawienie w False
nie sprawi, że to zadziała.
Pozdrowienia,
JEDYNĄ rzeczą, która działała dla mnie, był HTML.
Okazało się, że jest to o wiele łatwiejsze do zrobienia niż którekolwiek z podejść zautomatyzowanych.
Poniższy kod zmienia kolor tekstu na podstawie parametru przekazanego przez obiekt wywołujący.
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/>
tagu (i jest czymś bardziej znanym ludziom HTML: D), a nie tylko kolorem, dzięki czemu zapewnia większą elastyczność.
Najlepszym sposobem na ustawienie dowolnej funkcji dotyczącej kolorów dowolnego widżetu jest użycie QPalette .
Najłatwiejszym sposobem znalezienia tego, czego szukasz, jest otwarcie Qt Designer, ustawienie palety QLabel i sprawdzenie wygenerowanego kodu.
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()
metoda zwraca wybrany kolor. Możesz zmienić kolor etykiety za pomocąstylesheet