Qt使用调色板更改QWidget的背景颜色无效

5
我想在自定义的QWidget子类中更改背景颜色。 以下是代码:
WorldView::WorldView(QWidget *parent) : QWidget(parent)
{
    QPalette p(palette());
    p.setColor(QPalette::Background, Qt::black);
    setAutoFillBackground(true);
    setPalette(p);
}

但是它并没有按预期工作。背景颜色保持不变。 我不知道为什么。
4个回答

4
如您在文档中所阅读的那样, QPalette::Background 是过时的。请使用QPalette::Window代替。注意,有些小部件使用其他角色作为背景。请参见QPalette::ColorRole文档 另外:

警告:某些样式并非在所有绘图中都使用调色板,例如,如果它们使用原生主题引擎。这适用于Windows XP、Windows Vista和OS X样式。

在这种情况下,我建议使用样式表。请查看Qt样式表参考 但是,如果WorldView是一个自定义小部件,并且具有您自定义的paintEvent,则由您来绘制背景。

1
我尝试将“Background”更改为“Window”,但仍然无法正常工作。 (正如文档所说,“Background”被定义为“Window”)。也许问题出在其他地方。还是谢谢。 - crupest
也许你需要将autoFillBackground设置为true (QWidget::setAutoFillBackground(bool))。 - Fabio

4
请使用QPalette::Base代替QPalette::Background
 QPalette p(palette());
 p.setColor(QPalette::Base, Qt::lightGray);
 setPalette(p);

由于某些原因,自定义小部件使用QPalette::Base填充背景。

1
setStyleSheet('background-color:black;')

0

如果调色板颜色不起作用,那么可能有四个原因你需要检查:

  • 你从样式表中设置了颜色,我完全不建议这样做,或者你已经设置了父样式表。

  • 调色板中的颜色角色不匹配。

  • 确保调色板设置为小部件,我不建议为每个小部件设置调色板,除非你真的想要这样做,你应该为你的应用程序设置调色板。

  • 或者你的窗口管理器强制使用颜色,调色板根本不起作用。

这就是我脑海中想到的所有内容,如果你知道更多,请编辑这个答案并添加到项目中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接