如何设置QComboBox按钮的背景颜色?
How to set background color of QComboBox button?
Version/Environment:
- Windows 10 64 位
- Qt 5.11.0 MSVC2017 64 位
我有一个简单的QComboBox
到enable/disable一个功能:
QComboBox *onOffComboBox = new QComboBox();
onOffComboBox->insertItem(0, "Off");
onOffComboBox->insertItem(1, "On");
组合框作为单元格小部件添加到 table:
this->ui->settingsTable->setCellWidget(rowNumber, 1, onOffComboBox);
现在我想更改按钮的背景颜色,但不更改 select 项。
我的第一个方法是简单地使用 QWidget
的 setStyleSheet
函数:
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:
QPalette::Window
、QPalette::Foreground
、QPalette::Button
- 什么都不做
QPalette::Base
- 为 select 项目着色(见图)
QPalette::Text
- 为按钮和 select 项的文本着色
那么,如何在不覆盖或抑制标准样式的情况下更改 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;
}
Version/Environment:
- Windows 10 64 位
- Qt 5.11.0 MSVC2017 64 位
我有一个简单的QComboBox
到enable/disable一个功能:
QComboBox *onOffComboBox = new QComboBox();
onOffComboBox->insertItem(0, "Off");
onOffComboBox->insertItem(1, "On");
组合框作为单元格小部件添加到 table:
this->ui->settingsTable->setCellWidget(rowNumber, 1, onOffComboBox);
现在我想更改按钮的背景颜色,但不更改 select 项。
我的第一个方法是简单地使用 QWidget
的 setStyleSheet
函数:
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:
QPalette::Window
、QPalette::Foreground
、QPalette::Button
- 什么都不做QPalette::Base
- 为 select 项目着色(见图)QPalette::Text
- 为按钮和 select 项的文本着色
那么,如何在不覆盖或抑制标准样式的情况下更改 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;
}