基本需求:的SVG參數Qt中加載
我在Qt
的應用程序,在svg
替換顏色工作。
一個很好的實現方法是解析svg
xml
,並用顏色匹配替換顏色。
不幸的是,應用程序必須運行在速度和內存非常有限的平臺上,並且從xml
(或文本字符串)將svg
加載到QSvgRenderer
中的速度非常慢。
所以 - 我目前的實現是字符串替換知顏色在QByteArray
渲染器加載六角的發生。
一個很大的侷限性 - 如果我想用筆的顏色來替換填充顏色,並且它們匹配,那麼最終會出現破損的斑點。
第二個限制:我只能有2個定義的顏色,一個填充和一支筆。
我想什麼:
我希望能夠創造一個「參數」 SVG,在那裏我可以取代「顏色1」,「顏色2」,「COLOR3」在頂部定義,與任何用戶選擇的顏色。
注 - svg
必須由QSvgRenderer
被加載,因此,參數值不能在外部html
或js
。
svg
必須是獨立的...沒有外部呼叫者的要求。
但是我可以在加載之前用代碼替換參數值。
我只是想能夠替換參數在一個單一的位置,而不是他們發生的任何地方的xml
內的實際值。
我曾嘗試:
我的svg
文檔,它可以創建參數值已閱讀。這是一個例子,就像我理解它...
w3.org example
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 110 40" width="100%" height="100%">
<title>Reusable Button</title>
<desc>Takes parameters from parent document's embedding element.</desc>
<defs>
<ref id="paramFill" param="color" default="blue"/>
<ref id="paramText" param="text-label">button</ref>
<ref id="paramStroke" param="outline" default="navy"/>
</defs>
<g>
<rect id="button_rect" x="5" y="5" width="100" height="30" rx="15" ry="15" fill="url(#paramFill)" stroke="url(#paramStroke)" />
<text id="button_label" x="55" y="30" text-anchor="middle" font-size="25" fill="black" font-family="Verdana">
<tref xlink:href="#paramText" />
</text>
</g>
</svg>
可惜Qt
不會加載它,瀏覽器顯示爲錯誤。
第二個例子:從S.O: Define color in SVG
<?xml version="1.0"?>
<svg width="704" height="702" xmlns="http://www.w3.org/2000/svg">
<style>
.myfill { fill:red }
</style>
<g fill="blue">
<rect x="0" y="0" width="704" height="702" class="myfill" />
</g>
</svg>
這在加載瀏覽器中正確的red
,但Qt
與blue
加載它 - 那麼清楚它不支持的參數值。
是否存在的使用參數svg
任何可能的版本,可以通過Qt
支持?
有人可以幫助解決我的例子或給一個正確的/更好的例子嗎?
謝謝。
Qt版本:4。8