gpt4 book ai didi

c++ - 在qt中更改svg的颜色

转载 作者:可可西里 更新时间:2023-11-01 15:09:09 41 4
gpt4 key购买 nike

我在资源中加载了一个 svg,但它是黑色的。如何将颜色更改为白色?

最佳答案

这就是您在 Qt 中的实现方式,不要忘记将 xml 和 svg 模块添加到您的 qt 项目(*.pro 文件)。此代码片段通过修改任何“路径”元素的“填充”属性来更改颜色,但您可以使用它来修改任何元素的任何属性。

void SetAttrRecur(QDomElement &elem, QString strtagname, QString strattr, QString strattrval);

void ChangeSVGColor()
{

// open svg resource load contents to qbytearray
QFile file("myfile.svg");
file.open(QIODevice::ReadOnly);
QByteArray baData = file.readAll();
// load svg contents to xml document and edit contents
QDomDocument doc;
doc.setContent(baData);
// recurivelly change color
SetAttrRecur(doc.documentElement(), "path", "fill", "white");
// create svg renderer with edited contents
QSvgRenderer svgRenderer(doc.toByteArray());
// create pixmap target (could be a QImage)
QPixmap pix(svgRenderer.defaultSize());
pix.fill(Qt::transparent);
// create painter to act over pixmap
QPainter pixPainter(&pix);
// use renderer to render over painter which paints on pixmap
svgRenderer.render(&pixPainter);
QIcon myicon(pix);
// Use icon ....

}


void SetAttrRecur(QDomElement &elem, QString strtagname, QString strattr, QString strattrval)
{
// if it has the tagname then overwritte desired attribute
if (elem.tagName().compare(strtagname) == 0)
{
elem.setAttribute(strattr, strattrval);
}
// loop all children
for (int i = 0; i < elem.childNodes().count(); i++)
{
if (!elem.childNodes().at(i).isElement())
{
continue;
}
SetAttrRecur(elem.childNodes().at(i).toElement(), strtagname, strattr, strattrval);
}
}

关于c++ - 在qt中更改svg的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15123544/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com