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

Posted

技术标签:

【中文标题】如何设置 QComboBox 按钮的背景颜色?【英文标题】:How to set background color of QComboBox button? 【发布时间】:2019-06-07 04:31:01 【问题描述】:

版本/环境:

Windows 10 64 位 Qt 5.11.0 MSVC2017 64 位

我有一个简单的QComboBox 来启用/禁用一个功能:

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

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

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

现在我想更改按钮的背景颜色,而不是所选项目。

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

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

但这会抑制标准样式:

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

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

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

只使用QComboBox background: red;background-color: red; 的结果相同,只是选择的项目没有颜色。

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

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

这只会为选择的项目着色:

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

QPalette::Window, QPalette::Foreground, QPalette::Button - 什么都不做 QPalette::Base - 为所选项目着色(见图) QPalette::Text - 为按钮和所选项目的文本着色

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

弹出项目的样式也不应该改变。

这是我想要的图片:

【问题讨论】:

“按钮”是指向下箭头吗? @TrebuchetMS 不,要点击整个矩形来选择一个项目... @goulashsoup 你想改变弹出项目的背景颜色吗?您还提到了我不理解的所选项目,如果您在上面指出的内容正确,请不要使用术语按钮,因为它会带来混乱 @eyllanesc 我添加了一张图片,显示了期望的结果是什么......实际上官方文档也使用了 button 这个词:The drop-down button of a QComboBox.. @goulashsoup 好的,那么你不想改变弹出项目的颜色所以我的前提是错误的 【参考方案1】:

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

来自doc:

注意:对于复杂的小部件,例如 QComboBox 和 QScrollBar,如果有的话 属性或子控件是自定义的,所有其他属性或 子控件也必须自定义。

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

您可以为整个下拉菜单设置样式以模仿原生外观,但这样做并不好,而且不健壮(而且不便携)。

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

QComboBox 
  background: red;

【讨论】:

你成功了。我曾希望我能以某种方式访问​​原生外观样式,但这似乎是不可能的。 也许有一种非常棘手的方法可以让我错过,但根据文档,这不可能直截了当。我问了一个与您的问题相关的问题,但我认为这也不可能:***.com/q/54403698/6165833

以上是关于如何设置 QComboBox 按钮的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

qtcombobox的背景颜色越过下拉

qt中如何修改按钮的背景颜色?

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

如何设置按钮的背景颜色 - xcode

在java中如何设定面板的背景颜色

excel如何设置背景颜色