【发布时间】: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 好的,那么你不想改变弹出项目的颜色所以我的前提是错误的
标签: c++ qt windows-10 qt5 qtstylesheets