Как установить цвет фона виджета, такого как 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);

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

отлично работает для меня!