我在我的项目中有一个QwtPlot,我想以一种和谐的方式配置它的颜色 - 也就是说,例如,如果背景颜色是白色,轴应该是黑色的等等。现在我可以在一种“硬编码方式”:每次改变背景颜色(参考)时,我都会查看一组以前为该轴定义的颜色,并为该轴设置阵列中给定的颜色。但是这很“过时”,我想要一个更自动的方式。Qt StyleSheet系统无效QPalette;如何让他们一起工作?
寻求帮助here,Uwe告诉我使用QwtPlot::setPalette(color)
,它的效果很好本身。问题是QwtPlot是一系列基于QWidget的小部件的子元素,它们的颜色应该在全局样式表文件中配置,并且我注意到当这些小部件中的一个小部件的样式表被配置时,它将QwtPlot的调用作废为setPalette
。这就好像我应该在它们之间做出选择:如果我要在给定的窗口小部件中至少使用一次调用setPalette
,那么它的父窗口都不应该配置为主窗口部件(本例中为QMainWindow)样式表系统。这似乎什么setPalette
文档的这一部分是说:
警告:不要在使用Qt样式表一起使用这个功能(source)
,但它似乎应该仅在使用setPalette
的全局呼叫时才是这种情况。
所以我的问题是:有没有办法以和谐的方式解决这个问题?还是我需要放弃该软件那部分的样式表系统,而只是使用调色板?我尝试以更“本地化”的方式制作样式表配置 - 即试图对系统说“这个样式表配置只对这个小部件有效;不要将其永久保存到它的子部件”,但没有成功。如果这真的可能(因此我可能选择了错误的语法),我想知道。
它似乎并不在于它的工作原理,萨科= TI刚刚发现,如果我把什么 - 甚至事不与我QwtPlot的母公司部件 - 在全球样式表,那么任何对QwtPlot调用SetPalette的使用或任何其家长小部件是无效。例如,我在全局样式表文件中放置了QLabel的样式表配置,我甚至在我的QwtPlot父Widget中调用了'setStyleSheet(“”);'即使对'setPalette'的调用失效= T有什么建议? – Momergil
@Momergil我诚实的建议是不要使用调色板。该功能没有得到很好的支持。如果您必须在调色板和样式表之间进行选择,我个人总是选择样式表。在过去,我已经将'QwtPlot'子类化并在canvasBackground属性上设置了DESIGNABLE true标志,它允许您从样式表中设置它,但是也可以通过编程方式进行读写。然后,我会覆盖setCanvasBackground setter函数,根据画布笔刷的rgb或hsv为轴选择高对比度颜色。 –