Как установить цвет фона виджета, такого как combobox или double spin box?
Я пытаюсь установить цвет фона для окна двойной спин, и я не уверен, какую функцию я должен использовать.
Я видел некоторую функцию под названием SetBackgroundRole
принимает Qt::ColorRole
, но я не уверен, как использовать это.
любезно дайте мне знать, каков простой способ изменить цвет фона QComboBox
или QDoubleSpinBox
?
8 ответов
С помощью QPalette
не гарантируется работа для всех стилей, потому что авторы стилей ограничены руководствами разных платформ и собственным движком темы.
чтобы убедиться, что ваш цвет фона будет правильным, я бы предложил использовать Таблица Стилей Qt. Вот что я сделал, чтобы изменить цвет фона QComboBox
:
myComboBox->setStyleSheet("QComboBox { background-color: blue; }");
Я специально не пробовал для QSpinBox
, но я думаю, что это будет работать так же !
fhe обычно корректен, но не учитывает виджеты (например, спиновые коробки и кнопки/комбинации), которые используют другую фоновую роль в палитре. Более общим решением было бы что-то вроде этого:
QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);
кроме того, вы можете просмотреть описания различных ролей палитры и выяснить, какой вы хотите, а затем применить его к виджету, содержащему другие, которые вы хотите изменить. Изменения палитры должны распространяться на детей штучки.
видимо в Qt 4.1 и далее, вам нужно установить this->setAutoFillBackground( true );
для палитры, чтобы применить цвет фона.
на самом деле, если вы посмотрите на документы Qt для QPalette в случае QComboBox, фоновая роль, вероятно, не то, что вы хотите. То, что вы хотите:
QPalette:: Base используется в основном как цвет фона для виджетов ввода текста, но также может использоваться для другой живописи - например, фон выпадающих списков combobox и ручек панели инструментов. Обычно это белый или другой светлый цвет.
Итак, вот код, который я использую для установки цвет фона поля со списком, который я использую, чтобы соответствовать цвету виджета он находится на:
QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
в то время как предыдущие ответы могут установить цвет фона для не редактируемого 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);