如何设置组合框或双旋转框等小工具的背景颜色?

时间:2008-10-07 09:41:28

标签: qt qcombobox qspinbox

我正在设置双旋转框的背景颜色,我不确定我应该使用什么功能。

我看到一个名为SetBackgroundRole的函数接受Qt::ColorRole,但我不知道如何使用这个函数。

请告诉我,更改QComboBoxQDoubleSpinBox的背景颜色的简单方法是什么?

9 个答案:

答案 0 :(得分:42)

通常是正确的,但不考虑在调色板中使用不同背景角色的小部件(如旋转框和按钮/组合框)。更通用的解决方案是这样的:

QPalette pal = widget.palette();
pal.setColor(widget.backgroundRole(), Qt::blue);
widget.setPalette(pal);

或者,您可以查看各种调色板角色的描述并找出所需的调色板角色,然后将其应用于包含您想要更改的其他调色板的小部件。调色板更改应传播到子窗口小部件。

答案 1 :(得分:37)

使用QPalette不能保证适用于所有样式,因为样式作者受到不同平台指南和本机主题引擎的限制。

为确保您的背景颜色正确,我建议您使用Qt Style Sheet。以下是我更改QComboBox的背景颜色的方法:

myComboBox->setStyleSheet("QComboBox { background-color: blue; }");

我没有专门尝试QSpinBox,但我猜它会一样!

答案 2 :(得分:12)

实际上,如果你在QComboBox的情况下查看QPalette的Qt文档,那么后台角色可能不是你想要的。你想要的是:

  

QPalette :: Base 主要用作文本输入小部件的背景颜色,但也可用于其他绘画 - 例如组合框下拉列表和工具栏句柄的背景。它通常是白色或其他浅色。

所以这里是我用来设置我正在使用的组合框的背景颜色的代码,以匹配它所在的小部件的颜色:

QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);

答案 3 :(得分:11)

显然在Qt 4.1及更高版本中,您需要为调色板设置this->setAutoFillBackground( true );以应用背景颜色。

答案 4 :(得分:3)

虽然之前的答案可能会为不可编辑的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);

答案 5 :(得分:1)

构建一个蓝色的调色板,无论实际的小部件是什么:

comboBox->setPalette( QPalette( Qt::blue ) );

答案 6 :(得分:0)

我会尝试像

这样的东西
QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);

答案 7 :(得分:0)

comboBox->setPalette( QPalette( Qt::blue ) );

对我来说很好!

答案 8 :(得分:0)

以前没有答案对我有用,但是我混合了所有答案,最后使用 Qt 5.12

QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);