【问题标题】:Qt changing the background color of QWidget using palette doesn't workQt使用调色板更改QWidget的背景颜色不起作用
【发布时间】:2016-08-16 07:16:48
【问题描述】:

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

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

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

我不知道为什么。

【问题讨论】:

    标签: c++ qt


    【解决方案1】:
    setStyleSheet('background-color:black;')
    

    【讨论】:

      【解决方案2】:

      使用QPalette::Base 而不是QPalette::Background

       QPalette p(palette());
       p.setColor(QPalette::Base, Qt::lightGray);
       setPalette(p);
      

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

      【讨论】:

        【解决方案3】:

        正如您在documentation 中看到的,QPalette::Background 已过时。请改用QPalette::Window。请注意,某些小部件使用其他一些角色作为背景。见QPalette::ColorRole documentation

        还有:

        警告:有些样式并非所有绘图都使用调色板,因为 例如,如果他们使用本机主题引擎。这是这种情况 适用于 Windows XP、Windows Vista 和 OS X 样式。

        在这种情况下,我建议使用样式表。见Qt Style Sheets Reference

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

        【讨论】:

        • 我试过把Background改成Window,还是不行。 (正如文档所说,Background 被定义为Window。)也许问题出在其他地方。还是谢谢。
        • 也许你必须将autoFillBackground 设置为true (QWidget::setAutoFillBackground(bool))
        【解决方案4】:

        如果调色板颜色不起作用,那么您应该检查四个原因

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2014-04-09
          • 1970-01-01
          • 2016-11-28
          • 1970-01-01
          • 1970-01-01
          • 2021-07-09
          • 2012-12-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多