Qt 使用调色板更改 QWidget 的背景颜色不起作用

cru*_*est 5 c++ qt

我想更改 QWidget 的自定义子类中的背景颜色。这是代码:

WorldView::WorldView(QWidget *parent) : QWidget(parent)
{
    QPalette p(palette());
    p.setColor(QPalette::Background, Qt::black);
    setAutoFillBackground(true);
    setPalette(p);
}
Run Code Online (Sandbox Code Playgroud)

但它并没有按预期工作。背景颜色保持不变。

我不知道为什么。

Fab*_*bio 4

正如您在文档中所读到的,QPalette::Background已经过时了。QPalette::Window代替使用。请注意,某些小部件使用其他一些角色作为背景。请参阅QPalette::ColorRole 文档

还:

警告:某些样式不会将调色板用于所有绘图,例如,如果它们使用本机主题引擎。Windows XP、Windows Vista 和 OS X 风格都是这种情况。

在这种情况下,我建议使用样式表。请参阅Qt 样式表参考

但是,如果 WorldView 是自定义小部件,则使用您的自定义paintEvent,由您来绘制背景