QPalette 不适用于子 QWidget

QPalette does not work on sub QWidget

我想用 QLinerGradient 刷我的子部件。我使用 QtDesigner 创建了 ui。

但是我不能用这段代码刷这个widget。(ui.colorBarWidget正常的QWidget是QtDesigner创建的。)

   QPalette palette;
   QLinearGradient gradient(ui.colorBarWidget->rect().topLeft(),ui.colorBarWidget->rect().topRight());

   gradient.setColorAt(0,   Qt::blue);
   gradient.setColorAt(0.2, Qt::green);
   gradient.setColorAt(0.4, Qt::red);
   gradient.setColorAt(0.6, Qt::yellow);
   gradient.setColorAt(1,   Qt::cyan);
   palette.setBrush(QPalette::Base, gradient);

   ui.colorBarWidget->setPalette(palette);

此外,此代码可在独立 QWidget 中运行 application.This 是其输出:

但我不能在我的设计中做同样的事情。我可以用 styleSheet

ui.colorBarWidget->setStyleSheet( "background-color: qlineargradient( x1:0 y1:0, x2:0 y2:1, stop:0 blue, stop:1 red )" ); /* works */

但是为什么我不能用 QPalette 做到这一点。

提前致谢。

我不知道 ui.colorBarWidget 是什么类型的小部件,但它看起来不像 QLineEditQComboBox 那样的入口小部件。

因此,您应该使用 QPalette::Window 角色而不是 QPalette::Base

在 Qt 文档中,QPalette::Base role 有如下描述:

Used mostly as the background color for text entry widgets, but can also be used for other painting - such as the background of combobox drop down lists and toolbar handles. It is usually white or another light color.

我找到了解决方案。如果在设置调色板后使用:

ui.colorBarWidget->setAutoFillBackground(true);

此 属性 默认为 false。所以你应该启用它然后一切都很好。但是你也应该考虑尺寸,固定尺寸更好。