如何设置QComboBox按钮的背景颜色?

How to set background color of QComboBox button?

Version/Environment:

我有一个简单的QComboBox到enable/disable一个功能:

QComboBox *onOffComboBox = new QComboBox();
onOffComboBox->insertItem(0, "Off");
onOffComboBox->insertItem(1, "On");

组合框作为单元格小部件添加到 table:

this->ui->settingsTable->setCellWidget(rowNumber, 1, onOffComboBox);

现在我想更改按钮的背景颜色,但不更改 select 项。

我的第一个方法是简单地使用 QWidgetsetStyleSheet 函数:

onOffComboBox->setStyleSheet("background-color: red;");

但这会抑制标准样式:

根据文档,我还使用了具有特定 QComboBox styles 的变体:

onOffComboBox->setStyleSheet("QComboBox::drop-down {background: red;}");

但这只会给带有箭头的部分上色并抑制它的样式:

仅使用 QComboBox {background: red;} 与使用 background-color: red; 的结果相同,只是 select 项没有着色。

正如 this 回答中所述,另一种方法是使用 QPallete:

QPalette pal = onOffComboBox->palette();
pal.setColor(QPalette::Base, QColor("red"));
onOffComboBox->setPalette(pal);
onOffComboBox->update(); // just in case this has any effect

这只会为 select 项着色:

我也尝试了几乎所有其他 QPalette color roles:

那么,如何在不覆盖或抑制标准样式的情况下更改 QComboBox 下拉按钮背景的颜色?

弹出项的样式也不应更改。

这是我想要的图片:

QComboBox 总是很难定制,因为它是由子部件组成的(甚至是条件子部件)。
我进行了测试,你的简单样式表 QComboBox {background:red} 在 Linux 上对我来说几乎可以正常工作,除了下拉列表中的框边框也是红色的。行为似乎因 GUI style.

而异

来自doc :

Note: With complex widgets such as QComboBox and QScrollBar, if one property or sub-control is customized, all the other properties or sub-controls must be customized as well.

如果你想自定义按钮,看起来你必须自定义所有内容......那么如果不覆盖或抑制标准样式就无法更改颜色.

您可以设置整个下拉列表的样式以模仿原生外观,但这样做并不好而且不稳健(而且不可移植)。

QComboBox QAbstractItemView {
  border: 1px solid grey;
  background: white;
  selection-background-color: blue;
}
QComboBox {
  background: red;
}