Qt 如何设置combobox或double spin box等小部件的背景色?
我正在尝试设置双旋转框的背景色,我不确定应该使用什么功能 我看到了一个名为Qt 如何设置combobox或double spin box等小部件的背景色?,qt,qcombobox,qspinbox,Qt,Qcombobox,Qspinbox,我正在尝试设置双旋转框的背景色,我不确定应该使用什么功能 我看到了一个名为SetBackgroundRole的函数,它接受Qt::ColorRole,但我也不知道如何使用这个函数 请告诉我,更改QComboBox或QDoubleSpinBox背景色的简单方法是什么?我会尝试类似的方法 QPalette pal = widget.palette(); pal.setColor(QPalette::Window, Qt::blue); widget.setPalette(pal); 使用qpale
SetBackgroundRole
的函数,它接受Qt::ColorRole
,但我也不知道如何使用这个函数
请告诉我,更改QComboBox
或QDoubleSpinBox
背景色的简单方法是什么?我会尝试类似的方法
QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
使用
qpalete
不能保证适用于所有样式,因为样式作者受到不同平台指南和本机主题引擎的限制
为了确保您的背景颜色正确,我建议使用。下面是我更改QComboBox
背景色的步骤:
myComboBox->setStyleSheet(“QComboBox{背景色:蓝色;}”)代码>
我还没有专门尝试过使用QSpinBox
,但我想它也可以用 fhe通常是正确的,但不考虑在调色板中使用不同背景角色的小部件(如旋转框和按钮/组合框)。更普遍的解决方案是这样的:
QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);
或者,您可以查看各种调色板角色的描述,找出您想要的一个,然后将其应用于包含您想要更改的其他角色的小部件。调色板更改应传播到子部件。构建一个蓝色的调色板,无论实际的小部件是什么:
comboBox->setPalette( QPalette( Qt::blue ) );
显然,在Qt4.1及以后的版本中,您需要设置this->setAutoFillBackground(true)为调色板编码>以应用背景色。事实上,如果您在QComboBox中查看Qpalete的Qt文档,背景角色可能不是您想要的。你想要的是:
qpalete::Base主要用作文本输入小部件的背景色,但也可用于其他绘制,例如组合框下拉列表和工具栏句柄的背景色。它通常是白色或其他浅色
下面是我用来设置组合框背景颜色的代码,我用它来匹配小部件的颜色:
QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
对我来说很好 虽然前面的答案可能会为不可编辑的QCOMBOX
设置背景色,但它们不适用于可编辑的QCOMBOX
。对于这种情况,您需要派生用于编辑的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);
以前没有任何答案对我有效,但我混合了所有的回答,最终完成了Qt 5.12的测试:
QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);
我试过这样做,但不知为什么背景颜色没有得到更新。你知道原因是什么吗。我的意思是,在执行setPalette之后,我是否应该调用重绘之类的东西?我这里没有要测试的QT,但是QWidget::update()应该强制重绘。您尝试过Jérôme的解决方案吗?qpalete::Window
不是QComboBox
的backgroundRole()
,因此此代码对QComboBox
没有任何作用。使用样式表设置背景颜色不是正确的方法,除非您愿意为QComboBox中的其他子控件设置样式(即下拉和向下箭头)。请参见Qt文档中的注释:“对于复杂的小部件,如QComboBox和QScrollBar,如果自定义了一个属性或子控件,则必须自定义所有其他属性或子控件。”链接:我在macI上圆形边缘的顶部和底部都有白色边框。我尝试过这个,但我的边框只有在QSpinBox被禁用时才起作用(即,如果QSpinBox被启用,颜色恢复正常)。有什么想法吗?这应该是一个很好的答案!另一个更酷、更微妙的突出效果是使用Qpalete::Background
而不是Qpalete::Base
,但使用深红色或绿色。
QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);