如何设置 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);
现在我想更改按钮的背景颜色,而不是所选项目。
我的第一种方法是简单地使用QWidget
的setStyleSheet
函数:
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 按钮的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章