- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的一个项目中有一个 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/
根据 this 示例,我最初以深色主题启动我的应用程序。 我想让用户能够切换回他们操作系统的当前默认系统颜色配置文件(因为我在没有设置 QPalette 的情况下启动该应用程序)。这可能吗? 最佳答案
我正在尝试更改 QPalette 的当前颜色组,但 QPalette 的 setCurrentColorGroup 方法似乎不起作用。 我正在运行此代码: app = QtGui.QApplicati
{btn = QtGui.QPushButton('Button', self) palettes = btn.palette() palettes.setColor(btn.back
我想用 QLinerGradient 刷我的子部件。我使用 QtDesigner 创建了 ui。 但是我不能用这段代码刷这个widget。(ui.colorBarWidget是正常的QWidget是由
我在我的一个项目中有一个 QwtPlot,我想以和谐的方式配置它的颜色 - 也就是说,例如,如果背景颜色是白色,轴应该是黑色,等等。现在我可以这样做以“硬编码方式”:每次更改背景颜色(引用)时,我都会
我使用稍微修改过的“cleanlooks”样式创建了一个 Qt 应用程序。我试过使用以下代码设置 WindowText,但更改没有生效。当我打开应用程序时,它会在后台以正确的文本颜色打开,当我单击该应
当我在 Ubuntu14.04 中使用 Qt4.8.6 编译 QtCreator3.3.2 中的示例代码时,出现以下错误: videowidget.cpp:19: error: no match fo
我对使用 Qt 进行开发还很陌生。过去一周我读了很多书,听说有时使用样式表设置背景图片会导致“速度变慢”的问题。 作为天才(讽刺)我想出了如何使用 QPalette.setBrush() 方法设置背景
我是一名优秀的程序员,十分优秀!