QPushButton没有正确改变背景颜色

时间:2013-10-29 21:22:16

标签: css qt qt4 qt4.8

我遇到QPushButton问题。 我使用QT 4.8和Designer。

我将按钮配置为“平坦”和“可检查”。 如果未选中,按钮应为红色,如果选中则为绿色。 要设置按钮样式,我使用样式表。

      QPushButton:default{
         background-color: red;
             color: red;
      }

      QPushButton:checked{
         background-color: green;
             color: black;
      }

现在问题。如果未选中该按钮,则为灰色。当我按下按钮时,他会变成绿色。 我尝试了不同的其他伪状态,比如!检查,或尝试更改为普通按钮。但它总是一样的。在默认状态下,样式表不起作用。如果我按下,悬停或者按钮的变化就像我想要的那样。

任何人都遇到同样的问题并有解决方案吗?

进一步解释一下。 color属性工作正常。 文本总是红色,除了我按下按钮然后是黑色。 因此样式表正在使用中,但只有background-color属性不起作用。

我尝试了不同的风格,比如motif,cde,cleanlooks等,它总是一样的。

2 个答案:

答案 0 :(得分:2)

我在QPushButton类参考中找到了这个。 “此属性的默认值为false。如果设置了此属性,则除非按下按钮,否则大多数样式都不会绘制按钮背景.setAutoFillBackground()可用于确保使用QPalette :: Button画笔填充背景。”因此我找到了以下解决方案。

首先,我保留了选中的样式表选项

     QPushButton:checked{
         background-color: green.
     }

我使用了一个调色板并设置了背景颜色和setAutoFillBackground函数。

     palette_red->setColor(window.button->backgroundRole(), QColor(255, 0, 0, 127));
     window.button->setAutoFillBackground(true);
 window.button->setPalette(*palette_red);

我使用切换信号来捕捉变化。 当按钮切换为TRUE时,样式表开始工作。 为了不获得双倍(绿色到红色)颜色,必须再次关闭setAutoFillBackground。

     window.button->setAutoFillBackground(false);

未切换的状态几乎相同。 我需要打开setAutoFillBackground并再次设置调色板。

     window.button->setAutoFillBackground(true);
     window.button->setPalette(*palette_red);

这是一个解决方案,它有效,但我仍然愿意接受进一步的投入。

答案 1 :(得分:0)

并非所有平台都支持样式化按钮背景。你在运行什么平台?正在使用的样式的类名是什么?

qDebug() << qApp->style()->metaObject()->className();