在我的一个项目中,我使用了一个QwtPlot,在其中我想以和谐的方式配置它的颜色 - 即,例如,如果背景颜色是白色,则轴应该是黑色等。现在,我可以通过“硬编码”的方法来实现这一点:每次更改背景颜色(参考值)时,我查看之前定义的轴颜色数组,并为该轴设置数组中给定的颜色。但这种方法已经过时了,我希望有更自动化的方式。
在这里寻求帮助时,Uwe告诉我要使用
因此,我的问题是:是否有一种和谐的方式来解决这个问题?还是我需要放弃样式表系统的那部分软件,改为只使用调色板?我试图以更“本地化”的方式进行样式表配置 - 即尝试告诉系统“此样式表配置仅对此小部件有效;请不要将其延续到其子小部件”,但没有成功。如果这确实是可能的(因此我很可能选择了错误的语法),我想知道。
在这里寻求帮助时,Uwe告诉我要使用
QwtPlot::setPalette(color)
,它本身效果很好。但问题是,QwtPlot是一系列基于QWidget的小部件的子级,这些小部件的颜色应在全局样式表文件中配置,我注意到当为这些小部件中的一个配置样式表时,它会使QwtPlot的setPalette
调用无效。就好像我应该在它们之间进行选择:如果我要在给定的小部件中使用至少一个setPalette调用,则直到主窗口小部件(在我的情况下是QMainWindow)都不应该使用样式表系统进行配置。这似乎是有关setPalette
的文档的这部分所说的:
但似乎这只是当使用全局调用警告:不要将此函数与Qt样式表一起使用。(source)
setPalette
时才应该出现的情况。因此,我的问题是:是否有一种和谐的方式来解决这个问题?还是我需要放弃样式表系统的那部分软件,改为只使用调色板?我试图以更“本地化”的方式进行样式表配置 - 即尝试告诉系统“此样式表配置仅对此小部件有效;请不要将其延续到其子小部件”,但没有成功。如果这确实是可能的(因此我很可能选择了错误的语法),我想知道。
setStyleSheet("");
,即使如此,对setPalette
的调用也被失效了 =T 有什么建议吗? - MomergilQwtPlot
并将DESIGNABLE true标志设置为canvasBackground属性,这允许您从样式表中设置它,但也可以通过编程方式读取和写入它。然后,我会重写setCanvasBackground setter函数,根据画布刷子的rgb或hsv选择高对比度颜色来选择轴。 - Nicolas Holthaus