gpt4 book ai didi

c++ - Qt 为除一个对象之外的所有对象设置样式

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:39 25 4
gpt4 key购买 nike

我目前为所有按钮设置了这种样式:

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 个按钮并且找到这些按钮的对象名称非常耗时消费(大型遗留代码库)。

谢谢

最佳答案

您有 2 个选择:仅将样式表应用于该按钮并在每次更改所选颜色时使它失效/重新应用,或者仅将该按钮子类化并重新实现 paintevent:

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;
};

附言KDE API 已经有了那个小部件:https://api.kde.org/frameworks-api/frameworks-apidocs/frameworks/kwidgetsaddons/html/classKColorButton.html

关于c++ - Qt 为除一个对象之外的所有对象设置样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44809587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com