QLabel: Metin ve arka plan rengini ayarlama


180

Metin rengini ve arka planını nasıl ayarlayabilirim QLabel?

Yanıtlar:


272

En iyi ve önerilen yol Qt Stil Sayfasını kullanmaktır .

A'nın metin rengini ve arka plan rengini değiştirmek için QLabelyapacağım şey:

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

Ayrıca Qt Stil Sayfalarını kullanmaktan kaçınabilir ve QPaletterenklerinizi değiştirebilirsiniz QLabel, ancak farklı platformlarda ve / veya stillerde farklı sonuçlar alabilirsiniz.

Qt belgelerinde belirtildiği gibi:

Stil yazarları farklı platformların yönergeleri ve yerel tema motoru tarafından kısıtlandığından, QPalette kullanmanın tüm stiller için çalışması garanti edilmez.

Ama böyle bir şey yapabilirsiniz:

 QPalette palette = ui->pLabel->palette();
 palette.setColor(ui->pLabel->backgroundRole(), Qt::yellow);
 palette.setColor(ui->pLabel->foregroundRole(), Qt::yellow);
 ui->pLabel->setPalette(palette);

Ama dediğim gibi, paleti kullanmamanızı ve Qt Stil Sayfasını kullanmamanızı şiddetle tavsiye ederim.


SetStyleSheet () yöntemini kullanıyorum ve en azından Qt 4.4 bağlanma ve Stil Sayfası şeyler çağrı ve bellek kullanımında bir artış neden sona erer.
Dave Johansen

Ben bulunabilir artan bellek kullanımı hakkında bir hata raporu açtı burada .
Dave Johansen

colorNitelik etkisizdir. Sadece HTML ile <font color="#FFFFFF">...</font>yazı tipi rengini ayarlayabildim (bu durumda beyaza.
Paulo Carvalho

Kullanıcının masaüstünün varsayılan (metin) rengini belirtmenin bir yolu var mı? color: ;'Sıfırlama' olarak kullanmak bunu yapıyor gibi görünüyor, ancak bu iyi bir uygulama mı yoksa daha iyi bir yöntem var mı?
AstroFloyd

38

QPalette'i kullanabilirsiniz, ancak setAutoFillBackground(true);arka plan rengini etkinleştirmek için ayarlamanız gerekir

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

Windows ve Ubuntu'da iyi çalışıyor, başka bir işletim sistemi ile oynamadım.

Not: Daha fazla bilgi için lütfen QPalette , renk rolü bölümüne bakın


Bu, HERHANGİ BİR yaklaşımın en önemli tek unsurudur (styleSheets hariç)
Eliyahu Skoczylas

3
AutoFillBackground öğesinin burada önemli bir sorun olduğunu belirttiğiniz için teşekkür ederiz. Yukarıdaki kabul edilen cevap bu ayar olmadan çalışmaz.
BSD

20

Bu cevabı ekliyorum çünkü bence herkes için yararlı olabilir.

Boyama uygulamamdaki renkli ekran etiketleri için RGBA renklerini (saydamlık için Alfa değerine sahip RGB rengi) ayarlama sorununa giriyorum .

İlk cevaba geldiğimde bir RGBA rengi ayarlayamadım. Ayrıca şöyle şeyler denedim:

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

burada colorbir RGBA rengi.

Yani, kirli çözümüm sınırlayıcı rektifi dolduran yöntemi genişletmek QLabelve geçersiz paintEvent()kılmaktı.

Bugün, stil referans özellikleri listesini açtım qt-assistantve okudum . Neyse ki, aşağıdakileri belirten bir örneği var:

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

Bu, aşağıdaki kod gibi bir şey yapmak için fikrimi açmak, örnek olarak:

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

Not setAutoFillBackground()içinde set Falseçalışması yapmayacağız.

Saygılarımızla,


14

Benim için çalışan tek şey html oldu.

Ve bunu programlı yaklaşımlardan çok daha kolay buldum.

Aşağıdaki kod, arayan tarafından geçirilen bir parametreye göre metin rengini değiştirir.

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

Burada da ne QPalette ne de stil sayfaları benim için işe yaramadı, çok sinir bozucu!
hiçbir şey bilmiyorum

Bu şekilde tercih ediyorum, çünkü <font/>etiketin içine başka süslü şeyler koymanıza izin veriyor (ve HTML kişilerine daha tanıdık bir şey: D) ve sadece bir renk değil, bu nedenle size daha fazla esneklik sağlıyor.
rbaleksandar

@iknownothing stylesheets QPalette aracılığıyla çalışır ... Her şey QPalette kullanır.
Victor Polevoy

13

Herhangi bir widget'ın renkleri ile ilgili herhangi bir özelliği ayarlamanın en iyi yolu QPalette kullanmaktır .

Ve aradığınızı bulmanın en kolay yolu Qt Designer'ı açmak ve bir QLabel'in paletini ayarlamak ve oluşturulan kodu kontrol etmektir.


2
Tasarımcıda, oluşturulan kodu görmek için "Form-> Kodu Görüntüle" yi tıklayın.
alisami

6

Bu mükemmel çalışıyor

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()yöntemi seçilen rengi döndürür. Kullanarak etiket rengini değiştirebilirsinizstylesheet


1
Kod takdir edilmesine rağmen, her zaman eşlik eden bir açıklama olmalıdır. Bu uzun olmak zorunda değil, ama bekleniyor.
peterh - Monica'yı geri ver

Bu kod çalışırken, bazı kesin optimizasyonlar vardır <code> QColor color = QColorDialog :: getColor (QColor (Qt :: white), bu, tr ("Renk Seç"); // rengi seçmek için statik işlevi kullanın, başlangıç ​​değeri beyazdır </br> ui-> label-> setStyleSheet (QString ("QLabel {background-color:% 1; color: blue;}" "+ colcode +"; color: blue;} ") .arg ( color.name ()); // color.name #RRGGBB biçimli bir dize döndürür </code>
Scott Aron Bloom
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.