У меня есть подкласс QGraphicsSvgItem
, который содержит svg, который я могу изменить на основе действий пользователя.Могу ли я повторно использовать QSvgRenderer при изменении содержимого QByteAray?
У меня может быть несколько элементов такого типа - они создаются путем загрузки 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?
Спасибо, я могу использовать это. Кажется, это не вызывает обновления - поэтому я должен сам это назвать - и получаю странные результаты, если я использую его при первой загрузке ... (если 'renderer()' я пытался «загружать» вместо 'new' и получил гигантский svg) – Thalia