我想要设置一个双精度旋转框的背景颜色,但不确定应该使用哪个函数。
我看到了一些名为SetBackgroundRole
的函数,它接受一个Qt::ColorRole
参数,但我也不确定如何使用它。
请告诉我,有什么简单的方法可以改变QComboBox
或QDoubleSpinBox
的背景颜色吗?
fhe是基本正确的,但没有考虑到在调色板中使用不同背景角色的小部件(如旋转框和按钮/组合框)。一个更通用的解决方案可能是这样的:
QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);
或者,您可以查看各种调色板角色的描述,并找出您想要的角色,然后将其应用于包含其他要更改的小部件的小部件。 调色板更改应该传播到子小部件。
使用 QPalette
并不能保证所有样式都能正常工作,因为样式作者受不同平台指南和本地主题引擎的限制。
为确保您的背景颜色正确,建议使用 Qt 样式表。以下是我用来更改 QComboBox
背景颜色的方法:
myComboBox->setStyleSheet("QComboBox { background-color: blue; }");
我没有专门尝试过 QSpinBox
,但我想它应该也是一样的!
实际上,如果你查看Qt文档中的QPalette,在QComboBox的情况下,背景角色可能不是你想要的。你需要的是:
QPalette::Base 主要用作文本输入部件的背景颜色,但也可用于其他绘制,例如组合框下拉列表和工具栏手柄的背景。它通常是白色或其他浅色。
因此,这里是我使用的代码,用于设置组合框的背景颜色,使其与所在的窗口小部件的颜色匹配:
QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
在Qt 4.1及以上版本中,显然需要设置this->setAutoFillBackground( true );
以应用背景颜色的调色板。
虽然之前的答案可以为不可编辑的QComboBox
设置背景颜色,但对于可编辑的QComboBox
并不起作用。对于这种情况,您需要派生用于编辑的QLineEdit
小部件并重置其背景。
以下是我实现的方法:
QComboBox *myComboBox = new QComboBox();
myComboBox->setEditable(true);
QColor backColor = QColor(246, 230, 230);
QLineEdit *lineEditor = myComboBox->lineEdit();
QPalette pal = lineEditor->palette();
pal.setColor(QPalette::Base, backColor);
lineEditor->setPalette(pal);
构建一个无论小部件实际颜色如何都是蓝色的调色板:
comboBox->setPalette( QPalette( Qt::blue ) );
之前的答案对我都不起作用,但我将所有回复混合在一起,最终在Qt 5.12上实现了:
QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);
QPalette::Background
而不是 QPalette::Base
,但要选择深色,如品红色或绿色。 - psimpsonQPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
QPalette::Window
不是 QComboBox
的 backgroundRole()
,因此这段代码对于 QComboBox
没有任何作用。 - Marc Mutz - mmutzcomboBox->setPalette( QPalette( Qt::blue ) );
对我来说运行良好!