我可以在修改 QByteAray 内容时重用 QSvgRenderer 吗?

Can I reuse the QSvgRenderer when I modify the QByteAray contents?

我有一个 QGraphicsSvgItem 子类,其中包含一个我可以根据用户操作更改的 svg。

我可以有多个该类型的项目 - 它们是通过加载 svg 并在其上设置新的 svg 渲染器来创建的。我不确定这是否是最有效的方法 - 这是我在示例中看到的方法。

我在加载后将 svg 存储在 QByteArray - 为了快速更改,我对帽子可以更改的内容进行字符串替换。 (我曾尝试使用 xml,但转换为 QByteAray 的速度太慢)。

所以...在加载项目时,我这样做:

inFile >> m_svgContents;   // which is QByteArray
setSharedRenderer(new QSvgRenderer(m_svgContents));

然后在任何更改上,m_svgContents 都会被修改,我必须这样做

m_svgContents.replace(oldInfo, newInfo);
delete renderer();
setSharedRenderer(new QSvgRenderer(m_svgContents));

我刚刚添加了 delete renderer();,因为我 运行 valgrind 显示内存泄漏。

每次创建一个新的渲染器似乎很重...
是否可以重用渲染器? "shared renderer" 会建议我可以在多个项目之间共享它——这可能对我没有用,因为每个项目都可以有不同的 svg 内容——我的理解是每个渲染器都是每个不同的 svg 文件...

但当我更改 svg 内容时,也许可以重用,而不是删除和创建新的渲染器?

那么 QSvgRenderer::load() 呢?它应该用新的 SVG 内容替换当前的 SVG 内容。