Mom*_*gil 5 qt stylesheet palette
我在一个项目中有一个QwtPlot,我想以一种和谐的方式配置它的颜色-例如,如果背景颜色是白色,则轴应该是黑色,等等。现在,我可以在“硬编码方式”:每次更改背景颜色(参考值)时,我都会查看该轴先前定义的颜色的数组,并在该轴上为数组设置给定的颜色。但这是“过时的”,我想采用一种更自动化的方式。
在这里寻求帮助时,Uwe告诉我使用QwtPlot::setPalette(color)它,它本身效果很好。问题是QwtPlot是一系列基于QWidget的小部件的子代,其颜色应在全局样式表文件中配置,我注意到当配置了其中一个小部件的样式表时,QwtPlot的调用无效setPalette。好像我应该在它们之间进行选择:如果我要setPalette在给定的小部件中使用至少一个调用,那么直到主小部件(在我的情况下为QMainWindow)之前,其父级都不应该配置以下样式:工作表系统。这似乎是文档的这一部分setPalette所说的:
警告:不要在使用Qt样式表结合使用此功能(源)
,但似乎只有在全局调用时才应该是这种情况setPalette。
所以我的问题是:有没有办法和谐地解决这个问题?还是我需要放弃该软件那部分的样式表系统,而只使用调色板?我试图以一种更加“本地化”的方式来制作样式表配置-试图对系统说“此样式表配置仅对此窗口小部件有效;不要将其永久保留给其子窗口小部件”,但没有成功。如果确实可行(因此我可能选择了错误的语法),我想知道。
在样式表中,使用.QWidget {...}而不是QWidget {...}用于您不希望子类继承的样式。如果应用于所有QwtPlot父母,这将允许您再次使用setPalette。
但是,如果您尝试为同一个小部件混合使用样式表和调色板,则没有什么可以拯救您,样式表将始终取代它,所以要小心!
编辑:
另一种选择是子类化QwtPlot并使用画布的可设计属性,允许您使用样式表来设置属性,而且还可以通过编程方式访问该值。
#include <QWidget>
#include <QBrush>
#include <qwt_plot.h>
class QPlot : public QwtPlot
{
Q_OBJECT
Q_PROPERTY(QBrush canvasBackground READ canvasBackground
WRITE setCanvasBackground DESIGNABLE true)
public:
QPlot(const QwtText &title, QWidget* parent = nullptr) : QwtPlot(title, parent);
void setCanvasBackground(const QBrush &brush)
{
QwtPlot::setCanvasBackground(brush);
// set the axes color as well, maybe YIQ method?
};
QBrush canvasBackground() const
{
return QwtPlot::canvasBackground;
}
};
Run Code Online (Sandbox Code Playgroud)
在样式表中,您可以设置画布背景
qproperty-canvasBackground: #000000;
Run Code Online (Sandbox Code Playgroud)
我认为对比色算法有点超出了这个答案的范围,但这些问题可能会有所帮助:以编程方式选择高对比度颜色,如何反转颜色/颜色?
| 归档时间: |
|
| 查看次数: |
1813 次 |
| 最近记录: |