Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何设置combobox或double spin box等小部件的背景色?_Qt_Qcombobox_Qspinbox - Fatal编程技术网

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);