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.