我有一個QGraphicsSvgItem
子類,其中包含一個可以根據用戶操作更改的svg。我可以在修改QByteAray內容時重用QSvgRenderer嗎?
我可以有多個這種類型的項目 - 它們通過加載一個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