C++ Qt使用调色板更改QWidget的背景色不会';行不通

C++ Qt使用调色板更改QWidget的背景色不会';行不通,c++,qt,C++,Qt,我想更改QWidget的自定义子类中的背景色。 代码如下: WorldView::WorldView(QWidget *parent) : QWidget(parent) { QPalette p(palette()); p.setColor(QPalette::Background, Qt::black); setAutoFillBackground(true); setPalette(p); } 但它并没有像预期的那样起作用。背景色保持不变 我不知道为什么。

我想更改QWidget的自定义子类中的背景色。 代码如下:

WorldView::WorldView(QWidget *parent) : QWidget(parent)
{
    QPalette p(palette());
    p.setColor(QPalette::Background, Qt::black);
    setAutoFillBackground(true);
    setPalette(p);
}
但它并没有像预期的那样起作用。背景色保持不变

我不知道为什么。

正如您在中看到的,
qpalete::Background
已经过时了。改用
qpalete::Window
。注意,一些小部件使用其他角色作为后台。见

此外:

警告:某些样式不会对所有图形使用选项板,例如 例如,如果他们使用本机主题引擎。情况就是这样 适用于Windows XP、Windows Vista和OS X样式

在这种情况下,我建议使用样式表。看


但是,如果WorldView是一个自定义小部件,您可以使用自定义的
paintEvent
,您可以使用
qpalete::Base
而不是
qpalete::background

setStyleSheet('background-color:black;')
 QPalette p(palette());
 p.setColor(QPalette::Base, Qt::lightGray);
 setPalette(p);

出于某种原因,自定义小部件使用
qpalete::Base
填充背景色如果调色板颜色不起作用,则有四个原因需要检查

  • 你已经从样式表中设置了颜色,我根本不推荐,或者你已经设置了父样式表

  • 您在调色板中的颜色角色不匹配

  • 确保为小部件设置了调色板,我不建议为每个小部件设置调色板,除非您真的想,否则您应该为您的应用程序设置调色板

  • 或者您的窗口管理器正在强制颜色和调色板根本不起作用


这就是我的想法,如果你知道更多,请编辑此Answare并将其添加到项目中

我已尝试将
背景
更改为
窗口
,但仍然不起作用。(正如文档所说,
背景
被定义为
窗口
)问题可能出在另一个地方。还是谢谢。也许你必须将
autoFillBackground
设置为true(
QWidget::setAutoFillBackground(bool)