besoins de base:Svg avec des paramètres qui charge dans Qt
Je travaille sur une application Qt
qui remplace les couleurs dans un svg
.
Une bonne implémentation consiste à analyser le svg
xml
et à remplacer les couleurs par une bonne correspondance des couleurs.
Malheureusement, l'application doit fonctionner sur une plate-forme avec une vitesse et une mémoire très limitées, et charger le svg
dans le QSvgRenderer
à partir d'un xml
(ou chaîne de texte) est extrêmement lent.
Donc - mon implémentation actuelle consiste à remplacer les occurrences hexadécimales connues couleurs dans le QByteArray
chargé par le moteur de rendu.
Une grande limite - si je veux remplacer une couleur de remplissage avec une couleur de stylo, et ils correspondent, je me retrouve avec un blob cassé.
Une deuxième limitation: Je ne peux avoir que 2 couleurs définies, un remplissage et un stylo.
Ce que je voudrais:
Je veux être en mesure de créer un « paramétrés » svg, où je peux remplacer « color1 », « couleur2 », « color3 » défini en haut, avec tout ce les couleurs choisies par l'utilisateur.
Note - le svg
doit être chargé par le QSvgRenderer
, de sorte que les valeurs des paramètres ne peut pas être dans un ou à l'extérieur html
js
. Le svg
doit être autonome ... sans exigence d'appelant externe.
Mais je peux remplacer dans le code la valeur du paramètre avant la charge.
Je veux juste être en mesure de remplacer les paramètres dans un seul emplacement, au lieu des valeurs réelles à l'intérieur du xml
partout où ils se produisent.
Ce que j'ai essayé:
J'ai lu dans la documentation svg
qu'il est possible de créer des valeurs paramétrées. Ceci est un exemple d'autant que je le comprends ...
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>
Malheureusement Qt
ne se charge pas et navigateurs faire apparaître comme erreur.
Deuxième exemple: de 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>
Cette charge dans le navigateur correctement comme red
, mais Qt
charge avec blue
- si clairement qu'il ne supporte pas la valeur du paramètre.
Existe-t-il une version possible de svg
qui utilise des paramètres pouvant être pris en charge par Qt
?
Quelqu'un peut-il aider à corriger l'un de mes exemples ou donner un exemple correct/meilleur?
Merci.
Version Qt: 4.8