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)