版本/环境:
我有一个简单的QComboBox
来启用/禁用功能:
QComboBox *onOffComboBox = new QComboBox();
onOffComboBox->insertItem(0, "Off");
onOffComboBox->insertItem(1, "On");
组合框作为单元格小部件添加到表中:
this->ui->settingsTable->setCellWidget(rowNumber, 1, onOffComboBox);
现在我想更改按钮的背景颜色,而不是选择项目。
我的第一种方法是简单地使用QWidget
的{{3}}函数:
onOffComboBox->setStyleSheet("background-color: red;");
但这会抑制标准样式:
onOffComboBox->setStyleSheet("QComboBox::drop-down {background: red;}");
但这只会用箭头为零件上色并取消其样式:
仅使用QComboBox {background: red;}
与background-color: red;
的结果相同,只是所选项目没有颜色。
QPalette pal = onOffComboBox->palette();
pal.setColor(QPalette::Base, QColor("red"));
onOffComboBox->setPalette(pal);
onOffComboBox->update(); // just in case this has any effect
这只会为选定的项目着色:
QPalette::Window
,QPalette::Foreground
,QPalette::Button
-不执行任何操作QPalette::Base
-为所选项目着色(请参见图片)QPalette::Text
-为按钮和选择项的文本上色QComboBox
下拉按钮背景的颜色?弹出菜单的样式也不应更改。
这是我想要的图像:
答案 0 :(得分:1)
QComboBox
总是很难定制,因为它是由子控件(甚至是条件子控件)组成的。
我进行了测试,您简单的样式表QComboBox {background:red}
在Linux上对我来说几乎可以用,除了下拉菜单中的边框也为红色。根据{{3}},行为似乎有所不同。
来自GUI style:
注意:如果使用复杂的小部件(例如QComboBox和QScrollBar),则为 属性或子控件是自定义的,所有其他属性或 子控件也必须自定义。
如果要自定义按钮,则似乎必须自定义所有内容...这样就无法在不覆盖或抑制标准样式的情况下更改颜色。
您可以设置整个下拉列表的样式以模仿本机外观,但这并不好做且不够健壮(并且不便于移植)。
QComboBox QAbstractItemView {
border: 1px solid grey;
background: white;
selection-background-color: blue;
}
QComboBox {
background: red;
}