Qt 将自定义颜色的按钮设置为禁用样式

Qt 将自定义颜色的按钮设置为禁用样式,qt,stylesheet,qcolor,Qt,Stylesheet,Qcolor,我有一个类继承了QWidget。在某些情况下,我希望将其设置为禁用 小部件有一些颜色按钮,这些按钮是从颜色列表中设置的: void MyWidget::colorUpdate(QString color) { if(!color.isEmpty()) { QString foreground = (QColor(color).lightness() < 125 ? "white" : "black"); m_colorButton->s

我有一个类继承了
QWidget
。在某些情况下,我希望将其设置为禁用

小部件有一些颜色按钮,这些按钮是从颜色列表中设置的:

void MyWidget::colorUpdate(QString color)
{
    if(!color.isEmpty())
    {
        QString foreground = (QColor(color).lightness() < 125 ? "white" : "black");
        m_colorButton->setStyleSheet("color: " + foreground + "; background-color: " + color);
    }
}
我怎样才能使我的按钮——背景色和文本色我不知道,但按钮确实——具有“禁用外观”

(注意-颜色更新也适用于禁用的项目-尽管这并不复杂-我在设置禁用小部件时应用的任何样式表都可以应用于
colorUpdate
函数)

我只是不知道如何应用带有灰色阴影的样式表-或者在样式表中可能有一个“禁用”选项,甚至…

“禁用”中的颜色是什么样的

为禁用状态设置自己的样式。 您可以在样式表中设置特殊值:

m_colorButton->setStyleSheet(":enabled { color: " + foreground 
                             + "; background-color: " + color 
                             + " } :disabled { color: " + disabledForeground 
                             + "; background-color: " + disabledColor + " }");
编辑:更改了小部件的代码,而不是全局样式表


保留默认禁用的样式。您可以仅为启用状态设置自定义样式,然后当小部件被禁用时,样式不适用:

m_colorButton->setStyleSheet(":enabled { color: " + foreground 
                             + "; background-color: " + color + "}");

只需将自定义颜色更改绑定添加到
setWidgetEnabled()
?简单的解决方法是修改颜色平衡,例如色调和饱和度。这是您的(自定义)数据,因此您最清楚“禁用”时的外观。谢谢,这是最大的问题,我不希望按钮看起来“自定义不同”-只是具有与其他所有按钮相同的褪色外观。我不知道如何使颜色看起来“禁用”。但你已经为该按钮设置了自定义颜色?为什么你希望Qt知道当它被禁用时你的颜色应该是什么样子?是的,但我想“禁用”应用了某种颜色,或者,就像你说的,色调和饱和度的某种变化。我想知道这是什么。嗯,我希望规则在主题之间发生变化,但设置自定义样式会显式地覆盖主题的默认值,因此您也应该针对您的情况找出所需的禁用样式。降低饱和度使其看起来“已清洗”,使颜色更暗(或更灰)使其看起来被禁用。让字体变成灰色而不是任何颜色也会有帮助。我不是一个设计师,所以我不能告诉你你的东西应该做什么,所以无论如何也不是设计师即服务…这种风格必须在禁用状态下应用。我只是想让它看起来像是被淘汰了一样,就像是被禁用了一样。答案的第一部分,我想我需要对我的按钮进行子类化来完成。。。?这仍然不能回答问题:如何基于现有颜色获得“禁用样式”颜色,以及如何基于黑白文本获得“禁用样式文本”。但是我想我会用评论来回答这个问题,降低色彩饱和度。我当时误解了这个问题。如上所述,最好是创建您自己的禁用颜色,以适应您的自定义颜色。为了回答您的评论,不,您不需要对按钮进行子类化,我给出了一个全局QSS示例,但您可以直接这样做:
m_colorButton->setStyleSheet(“:enabled{color:”+前台+”;background color:“+color+”}:disabled{color:“+disabledForeground+”;background color:“+disabledColor+”)
m_colorButton->setStyleSheet(":enabled { color: " + foreground 
                             + "; background-color: " + color + "}");