Qt 当我修改QByteAray内容时,我可以重用QSVGrender吗?

Qt 当我修改QByteAray内容时,我可以重用QSVGrender吗?,qt,svg,qgraphicsitem,Qt,Svg,Qgraphicsitem,我有一个QGraphicsSvgItem子类,它包含一个svg,我可以根据用户的操作进行更改 我可以有多个这种类型的项目——它们是通过加载svg并在其上设置新的svg渲染器来创建的。我不确定这是否是最有效的方法——这是我在示例中看到的方法 加载后,我将svg存储在QByteArray-为了快速更改,我会对可以更改的内容进行字符串替换。(我曾尝试使用xml,但到QByteAray的转换太慢了) 所以。。。在加载项目时,我执行以下操作: inFile >> m_svgContents;

我有一个
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内容时,也许可以重用,而不是删除和创建新的渲染器?

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

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

谢谢,我可以使用它。它似乎不会导致更新-所以我必须自己调用它-如果我在第一次加载时使用它,我会得到奇怪的结果。。。(如果
renderer()
我尝试了
加载
而不是
新建
,得到了一个巨大的svg)谢谢,我可以使用它。它似乎不会导致更新-所以我必须自己调用它-如果我在第一次加载时使用它,我会得到奇怪的结果。。。(如果
renderer()
我尝试
load
而不是
new
,得到了一个巨大的svg)