我目前所有按钮都有这种风格:
this->setStyleSheet(".QPushButton { background-color: #416eb6; color: #ddd; }");
这很棒,因为它允许我为所有QPushButton
保持一个恒定的样式,而不必单独设置样式。
当我需要设置代表颜色选择器的QPushButton
样式时,会出现问题。该按钮应代表从颜色选择器中选择的颜色,但它只保留我设置的初始样式。
我尝试过的事情:
为该项目提供空样式表:
this->setStyleSheet(#m_colorChooserButton { });
将样式设置为初始值:
this->setStyleSheet(#m_colorChooserButton { background-color: initial});
使用类似的css
选择器:not
:
this->setStyleSheet(".QPushButton:not(#m_colorChooserButton) { background-color: #416eb6; color: #ddd; }");
有没有办法达到这个结果?
如果可能的话,我想模仿:not
选择器,因为这是最直接的,但此时,我会做任何有效的事情。
我想避免必须手动指定我希望它显示的每个按钮的样式,因为有超过100个按钮并且找到这些按钮的对象名称是非常时间消费(大型遗留代码库)。
由于
答案 0 :(得分:0)
您有两个选择:将样式表应用于该按钮,并在每次更改所选颜色时使其无效/重新应用,或者只是将该按钮子类化并重新实现该痛苦事件:
class ColorButton : public QPushButton{
Q_OBJECT
Q_DISABLE_COPY(ColorButton)
public:
ColorButton(QWidget* parent = Q_NULLPTR)
:QPushButton(parent)
,m_color(Qt::red)
{}
const QColor& color() const {return m_color;}
void setColor(const QColor& val){if(m_color==val) return; m_color=val; update();}
protected:
void paintEvent(QPaintEvent *)
{
QStylePainter p(this);
QStyleOptionButton option;
initStyleOption(&option);
option.palette.setColor(m_color,QPalette::Background);
p.drawControl(QStyle::CE_PushButton, option);
}
private:
QColor m_color;
};
P.S。 KDE API已经有了这个小部件:https://api.kde.org/frameworks-api/frameworks-apidocs/frameworks/kwidgetsaddons/html/classKColorButton.html