QLabel:テキストと背景の色を設定します


179

テキストの色と背景を設定するにはどうすればよいQLabelですか?

回答:


272

最善かつ推奨される方法は、Qtスタイルシートを使用することです。

のテキストの色と背景色を変更するにQLabelは、次のようにします。

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

Qtスタイルシートの使用を避けてのQPalette色を変更することもできますがQLabel、プラットフォームやスタイルによって結果が異なる場合があります。

Qtのドキュメントでは、

QPaletteの使用は、すべてのスタイルで機能するとは限りません。スタイルの作成者は、さまざまなプラットフォームのガイドラインとネイティブテーマエンジンによって制限されているためです。

しかし、あなたはこのようなことをすることができます:

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

しかし、私が言ったように、私はパレットを使用せずにQtスタイルシートに行くことを強くお勧めします。


私はsetStyleSheet()メソッドを使用しており、少なくともQt 4.4では、それがconnectとスタイルシートの呼び出しを呼び出し、メモリ使用量の増加を引き起こしています。
Dave Johansen、2012

ここで見つけることができるメモリ使用量の増加に関するバグレポートを開きまし
Dave Johansen

このcolor属性は無効です。HTML <font color="#FFFFFF">...</font>を介してのみ、フォントの色を設定できました(この場合は白に設定しました。)
Paulo Carvalho

ユーザーのデスクトップのデフォルト(テキスト)色を指定する方法はありますか?color: ;「リセット」として使用することはそれをするようですが、これは良い習慣ですか、それとももっと良い方法がありますか?
AstroFloyd

38

QPaletteを使用できますsetAutoFillBackground(true);が、背景色を有効にするように設定する必要があります

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とUbuntuで問題なく動作します。他のOSでプレイしたことはありません。

注:詳細については、QPalette、カラーロールのセクションを参照してください


これは、任意のアプローチの最も重要な一つの要素である(のstyleSheetsを除く。)
Eliyahu Skoczylas

3
ここでautoFillBackgroundが重要な問題であることを指摘していただきありがとうございます。上記の受け入れられた回答は、その設定なしでは機能しません。
BSD

20

私はそれが誰にとっても有用であると思うので、私はこの答えを追加します。

私のペイントアプリケーションで、カラーディスプレイラベルにRGBAカラー(つまり、透明度にアルファ値を持つRGBカラー)を設定する問題に取り組みます。

最初の答えを見つけたとき、RGBAカラーを設定できませんでした。私も次のようなことを試しました:

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

どこcolorRGBA色があります。

だから、私の汚い解決策は、その境界の四角を埋めるメソッドを拡張QLabelしてオーバーライドすることでしたpaintEvent()

今日は、を開きqt-assistantスタイル参照プロパティリストを読みました。幸い、次のような例があります。

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

例として、以下のコードのようなことをすることに心が開かれます。

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

setAutoFillBackground()set in Falseでは機能しないことに注意してください。

よろしく、


14

私のために働いた唯一のものはhtmlでした。

そして、それはプログラムによるアプローチのどれよりもはるかに簡単であることがわかりました。

次のコードは、呼び出し元から渡されたパラメーターに基づいてテキストの色を変更します。

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

ここでも同じですが、QPaletteもスタイルシートも機能しませんでした。
私は何も知りません。

<font/>色だけでなく、タグ内に他の凝ったもの(およびHTMLの人々:Dに馴染みのあるもの)を配置することもできるため、この方法を選択します。これにより、柔軟性が向上します。
rbaleksandar 2016年

@iknownothingスタイルシートはQPaletteで動作します...すべてがQPaletteを使用します。
Victor Polevoy

13

ウィジェットの色に関する機能を設定する最良の方法は、QPaletteを使用することです。

そして、探しているものを見つける最も簡単な方法は、Qt Designerを開いてQLabelのパレットを設定し、生成されたコードを確認することです。


2
デザイナーで、[フォーム]> [コードの表示]をクリックして、生成されたコードを確認します。
alisami

6

これは完璧に働いています

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()メソッドは選択された色を返します。を使用してラベルの色を変更できますstylesheet


1
コードは評価されますが、常に説明が必要です。これは長い時間である必要はありませんが、予想されます。
peterh-2015年

このコードは機能しますが、いくつかの明確な最適化があります<code> QColor color = QColorDialog :: getColor(QColor(Qt :: white)、this、tr( "Select Color"); //静的関数を使用して色を選択し、初期値は白です</br> ui-> label-> setStyleSheet(QString( "QLabel {background-color:%1; color:blue;}" "+ colcode +"; color:blue;} ").arg( color.name()); // color.nameは#RRGGBB形式の文字列を返します</ code>
Scott Aron Bloom
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.