gpt4 book ai didi

Qt StyleSheet 系统正在使 QPalette 失效;如何让他们一起工作?

转载 作者:行者123 更新时间:2023-12-03 03:58:45 35 4
gpt4 key购买 nike

我在我的一个项目中有一个 QwtPlot,我想以和谐的方式配置它的颜色 - 也就是说,例如,如果背景颜色是白色,轴应该是黑色,等等。现在我可以这样做以“硬编码方式”:每次更改背景颜色(引用)时,我都会查看先前定义的轴颜色数组,并在数组中为该轴设置给定颜色。但这相当“过时”,我想要一种更自动化的方式。

寻求帮助 here ,Uwe 告诉我使用 QwtPlot::setPalette(color) ,它本身就很好用。问题是 QwtPlot 是一系列基于 QWidget 的小部件的子项,其颜色应在全局样式表文件中配置,我注意到当配置其中一个小部件的样式表时,它会使 QwtPlot 对 setPalette 的调用无效。就好像我应该在它们之间进行选择:如果我要在给定的小部件中至少使用一次对 setPalette 的调用,那么它的父级直到主小部件(在我的例子中是 QMainWindow)都不应该配置为样式表系统。这似乎是文档中关于 setPalette 的部分所说的内容:

Warning: Do not use this function in conjunction with Qt Style Sheets.(source)

,但似乎只有在使用全局调用 setPalette 时才会出现这种情况。

所以我的问题是:有没有办法和谐地解决这个问题?或者我是否需要放弃该部分软件的样式表系统并仅使用调色板?我尝试以更“本地化”的方式进行样式表配置 - 试图对系统说“此样式表配置仅对该小部件有效;不要将其永久保留到其子小部件”,但没有成功。如果这真的可能(因此我可能选择了错误的语法),我想知道。

最佳答案

在样式表中,对于您不希望子类继承的样式,请使用 .QWidget {...} 而不是 QWidget {...}。如果应用于所有 QwtPlot 父级,这将允许您再次使用 setPalette

没有什么可以拯救你,但是如果你尝试为同一个小部件混合样式表和调色板,样式表将始终取代它,所以要小心!

编辑:

另一个选项是子类化 QwtPlot 并使用 Canvas 的可设计属性,允许您使用样式表来设置属性,而且还可以通过编程方式访问该值。

#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;
}
};

在样式表中,您可以使用

设置 Canvas 背景
qproperty-canvasBackground: #000000;

我认为对比色算法有点超出了这个答案的范围,但这些问题可能会有所帮助:Programmatically choose high-contrast colors , How do I invert a colour / color?

关于Qt StyleSheet 系统正在使 QPalette 失效;如何让他们一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803626/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com