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

时间:2016-03-16 17:01:31

标签: qt svg qgraphicsitem

我有一个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,它显示内存泄漏。

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

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

1 个答案:

答案 0 :(得分:2)

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