首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt StyleSheet系统正在使QPalette失效;如何使它们协同工作?

Qt StyleSheet系统正在使QPalette失效;如何使它们协同工作?
EN

Stack Overflow用户
提问于 2015-01-06 17:07:37
回答 1查看 2.5K关注 0票数 6

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

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

警告:不要将此函数与Qt样式表结合使用。(来源)

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

所以,我的问题是:有没有办法以和谐的方式解决这个问题?还是我需要放弃软件的样式表系统,而只使用调色板呢?我试图以一种更“本地化”的方式进行样式表配置--这就是说,“这个样式表配置只对这个小部件有效;不要将它延续到它的子小部件上”,但没有成功。如果这真的是可能的(因此我可能选择了错误的语法),我想知道。

EN

回答 1

Stack Overflow用户

发布于 2015-01-06 18:45:59

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

但是,如果您试图为同一个小部件混合样式表和调色板,那么样式表将永远取代它,所以请注意!

编辑:

另一个选项是子类QwtPlot,并为画布使用可设计属性,允许您使用样式表设置属性,但也可以编程访问该值。

代码语言:javascript
复制
#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;
    }
};

在样式表中,您可以用

代码语言:javascript
复制
qproperty-canvasBackground: #000000;

我认为对比颜色算法有点超出了这个答案的范围,但是这些问题可能会有所帮助:以编程方式选择高对比度颜色我如何倒置颜色/颜色?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27803626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档