重写QPushButton,使可通过设置icon,在不同状态的显示不同图标
默认QPushButton设置icon后,当鼠标hove或者press时,图标不会变更为对应状态的图片。通过重写按钮,设置图标值,实现不同状态对应不同图标
继承QPushButton并重绘按钮
重新赋值时只需要设置icon默认状态的值,QIcon查找图标时找不到对应状态的值会使用默认状态(normal)的值
// 重写initStyleOption函数,获取icon,根据不同状态重新给icon赋值
void CPushButton::initStyleOption(QStyleOptionButton* pOption) const
{
if (Q_NULLPTR == pOption)
{
return;
}
QPushButton::initStyleOption(pOption);
if (!pOption->icon.isNull())
{
// 按键:按下状态
if (pOption->state & QStyle::State_Sunken)
{
pOption->icon = pOption->icon.pixmap(pOption->iconSize, QIcon::Selected);
}
// 按键:鼠标停留状态
else if (pOption->state & QStyle::State_MouseOver)
{
pOption->icon = pOption->icon.pixmap(pOption->iconSize, QIcon::Active);
}
// 按键:禁止状态
else if (!(pOption->state & QStyle::State_Enabled))
{
pOption->icon = pOption->icon.pixmap(pOption->iconSize, QIcon::Disabled);
}
// 按键:正常状态(默认)
else
{
pOption->icon = pOption->icon.pixmap(pOption->iconSize, QIcon::Normal);
}
}
}
// 在paintEvent中调用自定义子类的initStyleOption覆盖父类的style
void CPushButton::paintEvent(QPaintEvent* pPaintEvent)
{
QStylePainter p(this);
QStyleOptionButton option;
initStyleOption(&option);
p.drawControl(QStyle::CE_PushButton, option);
}
在qss样式中设置图标
CPushButton
{
icon-size: 20px;
qproperty-icon: url(:/button_icon_normal.svg) normal, url(:/button_icon_hover.svg) active, url(:/button_icon_press.svg) selected, url(:/button_icon_disable.svg) disabled;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具