QLabel: ustaw kolor tekstu i tła


Odpowiedzi:


272

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ć QPalettekolory 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.


Używałem metody setStyleSheet () i przynajmniej w Qt 4.4 kończy się to wywołaniem connect i arkusza stylów, powodując zwiększenie użycia pamięci.
— Dave Johansen,

Otworzyłem raport o błędzie dotyczący zwiększonego użycia pamięci, który można znaleźć tutaj .
— Dave Johansen,

colorCechą jest nieskuteczne. Tylko przez HTML <font color="#FFFFFF">...</font>udało mi się ustawić kolor czcionki (w tym przypadku na biały.
— Paulo Carvalho

Czy istnieje sposób na określenie domyślnego (tekstu) koloru pulpitu użytkownika? color: ;Wydaje się, że użycie jako „resetowania” działa, ale czy jest to dobra praktyka, czy też jest lepsza metoda?
— AstroFloyd

38

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


To jest najważniejszy pojedynczy element KAŻDEGO podejścia (z wyjątkiem arkuszy stylów).
— Eliyahu Skoczylas

3
Dziękuję za wskazanie, że autoFillBackground jest tutaj kluczową kwestią. Zaakceptowana powyżej odpowiedź nie działa bez tego ustawienia.
— BSD

20

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 QLabeli zastąpieniepaintEvent() metody wypełniania jej prostego ograniczającego.

Dzisiaj otworzyłem qt-assistanti 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 Falsenie sprawi, że to zadziała.

Pozdrowienia,


14

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

To samo tutaj, ani QPalette, ani arkusze stylów nie działały dla mnie, bardzo denerwujące!
— nic nie wiem

Wolę ten sposób, ponieważ pozwala on również na umieszczenie innych wymyślnych rzeczy wewnątrz <font/>tagu (i jest czymś bardziej znanym ludziom HTML: D), a nie tylko kolorem, dzięki czemu zapewnia większą elastyczność.
— rbaleksandar

@iknown nic arkusze stylów działają przez QPalette ... Wszystko używa QPalette.
— Victor Polevoy

13

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.


2
W projektancie kliknij „Formularz-> Wyświetl kod”, aby zobaczyć wygenerowany kod.
— alisami

6

Ten działa idealnie

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


1
Chociaż kod jest doceniany, zawsze powinien mieć dołączone wyjaśnienie. Nie musi to trwać długo, ale można się tego spodziewać.
— peterh - Przywróć Monikę

Chociaż ten kod działa, istnieją pewne zdefiniowane optymalizacje <code> QColor color = QColorDialog :: getColor (QColor (Qt :: white), this, tr ("Select Color"); // użyj funkcji static, aby wybrać kolor, początkową wartością jest biały </br> ui-> label-> setStyleSheet (QString ("QLabel {background-color:% 1; color: blue;}" "+ colcode +"; color: blue;} ") .arg ( color.name ()); // color.name zwraca sformatowany ciąg znaków #RRGGBB </code>
— Scott Aron Bloom
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.