如果你的按钮类是从QPushButton继承而来,发现对它设置Qss不生效。
尝试了一下网上的方法,后来直接去看了一些QPushButton中的paintEvent函数中到底做了什么,就知道怎么解决了。
解决方法:
- 加上
Q_OBJECT
宏 - 重写
void paintEvent(QPaintEvent *event)
void 你的PushButton::paintEvent(QPaintEvent *event)
{
QPushButton::paintEvent(event);
...
}
这样你定义的按钮就可以用Qss设置样式了,问题解决了。
如果有兴趣,可以看看QPushButton::paintEvent(event)做了些什么事情。
我的Qt安装目录在D盘:
D:\Qt\Qt5.14.1\5.14.1\Src\qtbase\src\widgets\widgets\qpushbutton.cpp
void QPushButton::paintEvent(QPaintEvent *)
{
QStylePainter p(this);
QStyleOptionButton option;
initStyleOption(&option);
p.drawControl(QStyle::CE_PushButton, option);
}
/*!
Initialize \a option with the values from this QPushButton. This method is useful
for subclasses when they need a QStyleOptionButton, but don't want to fill
in all the information themselves.
\sa QStyleOption::initFrom()
*/
void QPushButton::initStyleOption(QStyleOptionButton *option) const
{
if (!option)
return;
Q_D(const QPushButton);
option->initFrom(this);
option->features = QStyleOptionButton::None;
if (d->flat)
option->features |= QStyleOptionButton::Flat;
#if QT_CONFIG(menu)
if (d->menu)
option->features |= QStyleOptionButton::HasMenu;
#endif
if (autoDefault())
option->features |= QStyleOptionButton::AutoDefaultButton;
if (d->defaultButton)
option->features |= QStyleOptionButton::DefaultButton;
if (d->down || d->menuOpen)
option->state |= QStyle::State_Sunken;
if (d->checked)
option->state |= QStyle::State_On;
if (!d->flat && !d->down)
option->state |= QStyle::State_Raised;
option->text = d->text;
option->icon = d->icon;
option->iconSize = iconSize();
}