[将QIcon
与QPushButton::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::State
和QIcon::Mode
的所有组合,但都没有更改。
运行Qt 5.12.1
这只是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); }