我可以在修改 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 内容。
我有一个 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 内容。