37

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

我看到了一些SetBackgroundRole接受 a 的函数Qt::ColorRole,但我也不确定如何使用这个函数。

请让我知道,改变背景颜色的简单方法是QComboBox什么QDoubleSpinBox

4

9 回答 9

45

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

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

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

于 2008-10-07T13:49:00.603 回答
40

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

为了确保您的背景颜色正确,我建议使用Qt Style Sheet。这是我为更改 a 的背景颜色所做的QComboBox

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

我没有专门尝试过 a QSpinBox,但我想它会一样的!

于 2008-10-07T12:16:46.577 回答
13

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

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

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

QPalette pal = myComboBox->palette();
pal.setColor(QPalette::Base, pal.color(QPalette::Window));
myComboBox->setPalette(pal);
于 2010-06-02T16:57:59.577 回答
11

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

于 2009-10-15T13:26:32.343 回答
4

虽然以前的答案可能会为不可编辑的设置背景颜色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);
于 2014-01-22T18:54:02.627 回答
2

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

comboBox->setPalette( QPalette( Qt::blue ) );
于 2009-07-26T11:04:46.973 回答
1

以前没有答案对我有用,但我混合了所有回复,最后在Qt 5.12上工作:

QPalette pal = ui.widget->palette();
pal.setColor(QPalette::Base, Qt::red);
ui.widget->setPalette(pal);
于 2019-05-16T13:35:08.723 回答
0

我会尝试类似的东西

QPalette pal = widget.palette();
pal.setColor(QPalette::Window, Qt::blue);
widget.setPalette(pal);
于 2008-10-07T09:51:02.797 回答
-1
comboBox->setPalette( QPalette( Qt::blue ) );

对我来说很好!

于 2011-01-15T17:17:35.913 回答