在Qt中简单的颜色填充QIcons

16

我需要创建一个能够改变QWidget背景的菜单。我希望在填充QMenu的QActions中放置代表所选颜色的QIcon。我不想使用Photoshop手动绘制这些图标。是否可以编写一个简单的图标并填充某种颜色?这样,如果需要任意数量的QActions,我就可以有了它,并且不用在Photoshop中制作大量的图标。

2个回答

24

您可以使用 QPixmap 构造 QIcon。QPixmap 可以使用 'fill' 方法,填充指定大小并具有特定颜色的图像。

例如,要创建一个红色的 100x100 图标:

QPixmap pixmap(100,100);
pixmap.fill(QColor("red"));
QIcon redIcon(pixmap);

这只会填充图像中透明的部分,对吧?我的意思是,这可以用来填充 QIcon 中透明的部分吗? - SexyBeast
2
很抱歉,我不明白。这段代码创建了一个全新的图标,它是一个纯红色的正方形。 - cgmb

12

我刚刚弄明白如何将图标的颜色改变为任何其他颜色。因此,图标的图像必须由一种纯色(这里是“黑色”)组成,可以使用一个位图和其遮罩能力将其转换为另一种颜色(比如“红色”):

pixmap = QPixmap(filename)
mask = pixmap.createMaskFromColor(QColor('black'), Qt.MaskOutColor)
pixmap.fill((QColor('red')))
pixmap.setMask(mask)

btNew = QToolButton()
btNew.setIcon(QIcon(pixmap))

2
很酷,不过对我来说使用 createMaskFromColor(QColor('transparent'), Qt.MaskInColor) 效果更好。 - falkb
2
这个主题被标记为C++,但这不是有效的C++代码。我想编辑它,但审阅者以我不知道的原因拒绝了它。 除此之外,将其移植到C++后,该解决方案对我起作用了。 - bns
我认为你是对的 - 我没有意识到这个问题与c++有关 - 但我也认为它不应该改变已经存在的答案太多......而且我不知道你的代码是否稳定 - 所以我不能接受它。我认为,你应该自己回答!感谢提示。 - Henhuy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接