コンボボックスやダブルスピンボックスなどのウィジェットの背景色を設定するにはどうすればよいですか?
質問
ダブルスピンボックスの背景色を設定しようとしていますが、どの機能を使用すべきかわかりません。
Qt :: ColorRole
を受け入れる SetBackgroundRole
という関数を見ましたが、この関数の使い方もわかりません。
教えてください、 QComboBox
または QDoubleSpinBox
の背景色を変更する簡単な方法は何ですか?
解決
QPalette
の使用は、すべてのスタイルで機能するとは限りません。スタイルの作成者は、異なるプラットフォームのガイドラインとネイティブテーマエンジンによって制限されているためです。
背景色が正しいことを確認するには、 Qtスタイルを使用することをお勧めしますシート。以下は、 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 ) );
次のようなものを試します
QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
comboBox->setPalette( QPalette( Qt::blue ) );
私にとってはうまくいきます!
以前は答えが機能しませんでしたが、すべての回答を組み合わせて、最終的に Qt 5.12 に取り組みました:
QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);