我有一个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内容时,也许可以重用而不是删除和创建新的渲染器?
答案 0 :(得分:2)
QSvgRenderer::load()
怎么样?它应该用新的SVG内容替换当前的SVG内容。