QPushButton 没有正确改变背景颜色

gat*_*rer 4 css qt qt4 qt4.8

我的 QPushButton 有问题。我使用 QT 4.8 和设计器。

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

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

      QPushButton:checked{
         background-color: green;
             color: black;
      }
Run Code Online (Sandbox Code Playgroud)

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

有谁遇到过同样的问题并有解决方案吗?

进一步解释一下。颜色属性工作正常。文本始终是红色的,除非我按下按钮,然后它是黑色的。因此样式表正在使用,但只是背景颜色属性不起作用。

我尝试了不同的风格,比如主题、cde、cleanlooks 等,但总是一样的。

gat*_*rer 5

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

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

     QPushButton:checked{
         background-color: green.
     }
Run Code Online (Sandbox Code Playgroud)

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

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

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

     window.button->setAutoFillBackground(false);
Run Code Online (Sandbox Code Playgroud)

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

     window.button->setAutoFillBackground(true);
     window.button->setPalette(*palette_red);
Run Code Online (Sandbox Code Playgroud)

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