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
是什么类型的小部件,但它看起来不像 QLineEdit
或 QComboBox
那样的入口小部件。
因此,您应该使用 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。所以你应该启用它然后一切都很好。但是你也应该考虑尺寸,固定尺寸更好。
我想用 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
是什么类型的小部件,但它看起来不像 QLineEdit
或 QComboBox
那样的入口小部件。
因此,您应该使用 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。所以你应该启用它然后一切都很好。但是你也应该考虑尺寸,固定尺寸更好。