ダブルスピンボックスの背景色を設定しようとしていますが、どの関数を使用すべきかわかりません。
Qt::ColorRole
を受け入れるSetBackgroundRole
と呼ばれる関数を見ましたが、この関数の使い方もわかりません。
QComboBox
またはQDoubleSpinBox
の背景色を変更する簡単な方法は何ですか?
スタイル作成者は異なるプラットフォームのガイドラインとネイティブテーマエンジンによって制限されているため、QPalette
を使用してもすべてのスタイルで機能するとは限りません。
背景色が正しいことを確認するには、 Qt Style Sheet を使用することをお勧めします。 QComboBox
の背景色を変更するために私がしたことは次のとおりです。
myComboBox->setStyleSheet("QComboBox { background-color: blue; }");
私は特にQSpinBox
を試したことはありませんが、同じように動作すると思います!
fheは一般に正しいものですが、パレットで異なるバックグラウンドロールを使用するウィジェット(スピンボックスやボタン/コンボボックスなど)を考慮していません。より一般的な解決策は次のようなものです。
QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);
あるいは、さまざまなパレットの役割の説明を調べて、必要な役割を見つけて、変更したい他の役割を含むウィジェットに適用することもできます。パレットの変更は、子ウィジェットに伝播する必要があります。
実際、QComboBoxの場合にQPaletteのQtドキュメントを見ると、おそらくバックグラウンドロールは望んでいないものです。あなたが欲しいのは:
QPalette :: Baseテキスト入力ウィジェットの背景色として主に使用されますが、コンボボックスのドロップダウンリストやツールバーハンドルの背景など、他のペイントにも使用できます。通常は白または別の明るい色です。
だから、ここに私が使用しているウィジェットの色に合わせて使用しているコンボボックスの背景色を設定するために使用しているコードがあります:
QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
どうやらQt 4.1以降では、背景色を適用するには、パレットのthis->setAutoFillBackground( true );
を設定する必要があります。
前の回答では、編集不可能な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);
実際のウィジェットに関係なく、青色のパレットを作成します。
comboBox->setPalette( QPalette( Qt::blue ) );
comboBox->setPalette( QPalette( Qt::blue ) );
私のためにうまくいく!
私は次のようなものを試してみたい
QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
以前は答えがうまくいきませんでしたが、すべての回答を混ぜ合わせて最終的にQt 5.12:
QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);