QPushButton不遵守QIcon模式更改

问题描述 投票:0回答:1

[将QIconQPushButton::setIcon()一起使用时,似乎模式更改不符合为QIcon设置的模式更改

QIcon helpIcon;
helpIcon.addPixmap(QPixmap(":/icons/style/help.png"), QIcon::Normal);
helpIcon.addPixmap(QPixmap(":/icons/style/help_hover.png"), QIcon::Active); //ignored?

QPushButton *myButton = new QPushButton(this);
myButton->setIcon(helpIcon);

我希望发生的是,当悬停按钮时,图标应该从一个像素图更改为另一个像素图。而是,图标保持不变。仅在按下按钮时才会更改。我尝试了QIcon::StateQIcon::Mode的所有组合,但都没有更改。

运行Qt 5.12.1

c++ qt qpushbutton qicon
1个回答
0
投票

这只是QPushButton处理状态(以及图标模式/状态)的方式,与QToolButton不同。更具体地说,这是当前QStyle子类如何使用按钮状态信息绘制图标的方式。例如,这里是QPushButton::paintEvent() code(随后看到初始化状态数据的initStyleOption()调用),然后将样式选项移交给当前处于活动状态的QStyle(例如WindowsVista / Macintosh / Fusion / StyleSheets,取决于操作系统或设置)。然后,如果我们查看相关的QFusionStyle code,我们可以看到icon Active模式仅在按钮具有焦点时使用。或same中的QCommonStyle(所有Windows / WindowsVista / Macintosh样式都归于此)。

要解决此问题,您可以使用CSS并为image状态设置QPushButton:hover属性,或为QProxyStyle::drawControl()控件元素实现自己的CE_PushButtonLabel方法。

CSS:QPushButton:hover { image: url(/path/to/icon.png); }

© www.soinside.com 2019 - 2024. All rights reserved.