QIcon HmsUiHelper::createIconFromSvg(const QString& svgFilePath, const QColor& color, int width, int height)
{
QSvgRenderer svgRenderer{ svgFilePath };
QPixmap pixmap(width, height);
pixmap.fill(Qt::transparent);
QPainter painter{ &pixmap };
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(QBrush{ color });
painter.setPen(Qt::NoPen);
painter.scale(static_cast<double>(width) / svgRenderer.defaultSize().width(),
static_cast<double>(height) / svgRenderer.defaultSize().height());
svgRenderer.render(&painter);
return QIcon{ pixmap };
}
我有这个功能,但是当我尝试将结果图标设置为 QLineEdit 操作时,svg 图标不会改变颜色,但会改变大小。
问题是什么以及如何解决?
我尝试了 RenderHints 等的许多变体。我不想更改 svg 属性(我找到的某种解决方案)。我想使用
QSvgRenderer
更改 svg 颜色。
QIcon HmsUiHelper::createIconFromSvg(const QString& svgFilePath, const QColor& color, int width, int height)
{
QSvgRenderer svgRenderer{ svgFilePath };
QPixmap pixmap{ width, height };
pixmap.fill(Qt::transparent);
QPainter painter{ &pixmap };
painter.setRenderHint(QPainter::Antialiasing);
svgRenderer.render(&painter);
QGraphicsScene scene;
QGraphicsPixmapItem item{ pixmap };
auto* colorizeEffect = new QGraphicsColorizeEffect{};
colorizeEffect->setColor(color);
item.setGraphicsEffect(colorizeEffect);
scene.addItem(&item);
QPixmap resultPixmap{ width, height };
resultPixmap.fill(Qt::transparent);
QPainter resultPainter{ &resultPixmap };
scene.render(&resultPainter);
return QIcon{ resultPixmap };
}
使用
QGraphicsColorizeEffect
的结果演示代码。
谢谢你musicamante!