4

QPushButton 有问题。我使用 QT 4.8 和 Designer。

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

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

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

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

有没有人遇到过同样的问题并有解决方案?

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

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

4

2 回答 2

5

我在 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);

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

于 2013-11-01T07:17:37.703 回答
0

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

qDebug() << qApp->style()->metaObject()->className();
于 2013-10-30T00:11:14.383 回答