QSvgRenderer
может render () определенный именованный элемент (например, объект или группа) из файла.Имя элемента будет значением атрибута id
каждого элемента <g>
.
Размер элемента (ограничивающая рамка) можно получить с помощью boundsOnElement () .
Вы можете создать один QSvgRenderer(const QString &filename)
, используя весь исходный файл SVG, а затем render()
отдельные элементы из него во время итерации по XML.К сожалению, я не вижу способа перебора с использованием QSvgRenderer
.
QSvgRenderer renderer(svgFile);
...
while (...) {
...
if (xmlReader->name() == "g" && xmlReader->attributes()->hasAttribute("id"))
{
const QString elementId = xmlReader->attributes()->value("id");
const QSize elementSize = renderer.boundsOnElement(id).size().toSize();
QImage image(elementSize, QImage::Format_ARGB32);
...
renderer.render(&painter, elementId);
image.save(QString("D:/%1.png").arg(elementId));
}
}