QPalette不适用于子QWidget

时间:2016-03-31 11:00:04

标签: c++ windows qt qwidget qpalette

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

enter image description here

但我无法使用此代码刷这个小部件。(ui.colorBarWidget是普通的QWidget,由QtDesigner创建。)

query({A:A,A:A}, 
"select Col1, Count(Col2) where Col1 <> '' group by Col1 label Col1 'Guid'")

此外,此代码适用于独立的QWidget应用程序。这是它的输出:

enter image description here

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

来做到这一点
   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);

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

提前致谢。

2 个答案:

答案 0 :(得分:0)

我不知道哪种小部件是ui.colorBarWidget,但它看起来不是一个条目小部件,如QLineEditQComboBox

因此,您应该使用QPalette::Window角色代替QPalette::Base

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

  

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

答案 1 :(得分:0)

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

ui.colorBarWidget->setAutoFillBackground(true);

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