QPushButton不能正确改变背景颜色

4

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

我将按钮配置为“flat”和“checkable”。 如果未选中,则按钮应为红色,如果选中,则为绿色。 为了样式化按钮,我使用样式表。

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

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

现在的问题是,如果按钮未被选中,它会变为灰色。当我按下按钮时,它会变成绿色,就像应该做的那样。 我尝试了不同的伪状态,比如!checked,或者试图改变成普通按钮。但情况总是一样的。在默认状态下,样式表不起作用。如果我按下、悬停或者其他操作按钮,它会按照我的想法进行更改。
有没有人遇到过相同的问题并有解决方案?
进一步解释一下。颜色属性是正确的。 文本始终为红色,除非我按下按钮,然后它就变成黑色。 所以样式表正在使用中,只是背景颜色属性不起作用。
我尝试了不同的样式,如motif、cde、cleanlooks等,结果都是一样的。

1
如果您的按钮是 flat,为什么不使用 :flat 选择器呢? - Dmitry Sazonov
我测试了很多不同的伪状态...但是平面/选中的组合没有起作用。 - gatherer
任何组合的 :flat:checked:hover:default? :) 你试过 ::indicator 选择器吗?顺便说一句,没有Qt文档说明 :checked 状态支持 QPushButton。为什么你认为它应该被支持呢?我建议你自定义 QCheckBox 来看起来像 QPushBotton。 这很容易。 - Dmitry Sazonov
我测试了很多组合,但不是所有的。Qt样式表参考http://qt-project.org/doc/qt-4.8/stylesheet-reference.html说QPushButton“支持:default,:flat,:checked伪状态。” - gatherer
1
有时为了使背景正常工作,您必须将边框更改为0或所需的任何值。 QPushButton的“普通状态”选择器只是QPushButton { background-color: red; },然后您放置状态相关的CSS。 - Kamil Klimek
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);

这是一个解决方案,它是有效的,但我仍然希望能够得到更多的意见。


0

并非所有平台都支持带样式的按钮背景。您使用的是哪个平台?正在使用的样式类名是什么?

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

我使用Linux Mint 15。我在QDebug中得到了QGtkStyle。 - gatherer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接