3

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

在此处输入图像描述

但是我不能用这段代码刷这个小部件。(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 应用程序。这是它的输出:

在此处输入图像描述

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

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

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

提前致谢。

4

2 回答 2

1

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

ui.colorBarWidget->setAutoFillBackground(true);

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

于 2016-04-07T17:36:37.690 回答
0

我不知道是什么样的小部件ui.colorBarWidget,但它看起来不是一个入口小部件,比如QLineEditor QComboBox

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

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

主要用作文本输入小部件的背景颜色,但也可用于其他绘画 - 例如组合框下拉列表和工具栏句柄的背景。它通常是白色或其他浅色。

于 2016-03-31T11:09:54.763 回答