web-dev-qa-db-ja.com

コンボボックスやダブルスピンボックスなどのウィジェットの背景色を設定するにはどうすればよいですか?

ダブルスピンボックスの背景色を設定しようとしていますが、どの関数を使用すべきかわかりません。

Qt::ColorRoleを受け入れるSetBackgroundRoleと呼ばれる関数を見ましたが、この関数の使い方もわかりません。

QComboBoxまたはQDoubleSpinBoxの背景色を変更する簡単な方法は何ですか?

34
AMM

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

背景色が正しいことを確認するには、 Qt Style Sheet を使用することをお勧めします。 QComboBoxの背景色を変更するために私がしたことは次のとおりです。

myComboBox->setStyleSheet("QComboBox { background-color: blue; }");

私は特にQSpinBoxを試したことはありませんが、同じように動作すると思います!

37
Jérôme

fheは一般に正しいものですが、パレットで異なるバックグラウンドロールを使用するウィジェット(スピンボックスやボタン/コンボボックスなど)を考慮していません。より一般的な解決策は次のようなものです。

QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);

あるいは、さまざまなパレットの役割の説明を調べて、必要な役割を見つけて、変更したい他の役割を含むウィジェットに適用することもできます。パレットの変更は、子ウィジェットに伝播する必要があります。

42

実際、QComboBoxの場合にQPaletteのQtドキュメントを見ると、おそらくバックグラウンドロールは望んでいないものです。あなたが欲しいのは:

QPalette :: Baseテキスト入力ウィジェットの背景色として主に使用されますが、コンボボックスのドロップダウンリストやツールバーハンドルの背景など、他のペイントにも使用できます。通常は白または別の明るい色です。

だから、ここに私が使用しているウィジェットの色に合わせて使用​​しているコンボボックスの背景色を設定するために使用しているコードがあります:

QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
12
Corwin Joy

どうやらQt 4.1以降では、背景色を適用するには、パレットのthis->setAutoFillBackground( true );を設定する必要があります。

11
shake

前の回答では、編集不可能なQComboBoxの背景色を設定できますが、編集可能なQComboBoxには機能しません。その場合、編集に使用されるQLineEditウィジェットを派生させ、その背景をリセットする必要があります。

これがどのように機能するようになったかです:

    QComboBox *myComboBox = new QComboBox();
    myComboBox->setEditable(true);
    QColor backColor = QColor(246, 230, 230);
    QLineEdit *lineEditor = myComboBox->lineEdit();
    QPalette pal = lineEditor->palette();
    pal.setColor(QPalette::Base, backColor);
    lineEditor->setPalette(pal);
3
Dan Blanks

実際のウィジェットに関係なく、青色のパレットを作成します。

comboBox->setPalette( QPalette( Qt::blue ) );
1
comboBox->setPalette( QPalette( Qt::blue ) );

私のためにうまくいく!

0
Rodrigo Haas

私は次のようなものを試してみたい

QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
0
fhe

以前は答えがうまくいきませんでしたが、すべての回答を混ぜ合わせて最終的にQt 5.12

QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);
0
Patapoom