[Qt]XSD-ből generált C++ kód

 ( martonmiklos | 2014. augusztus 30., szombat - 19:24 )

Van egy nyáktervező (EAGLE) ami XML alapú fájlformátumot használ. Szeretnék írni egy saját viewert hozzá amivel tudok egyszerre több alaktrészt "highlight"-olni, meg pár olyan featuret amit az EAGLE nem tud viszont panelek debugolásánál roppant hasznos lenne.

A terv eddig a következő: az EAGLE-hez adott DTD-ből csinálok XSD-t amit a kxml_compilerrel megetetek és lesz belőle gyönyörűséges C++ kód ami már most frankón fel is parsolja a panelterveket.

A board különféle grafikus objektumait QGraphicsItem-en keresztül szeretném kirajzolni egy QGraphicsScene-re.

Alapvetően azt szeretném, hogy csinálok egy az XML documentElementjének megfeleltetett objektumot (Eagle) ami egyrészt a generált parse függvénnyével végigparsolja az egész XML-t másrészt szeretném ha ezt az objektumot egy az egyben rá tudnám dobni egy QGraphicsScene-re.

Az autogenerált osztályokhoz nem akarok hozzápiszkáni mert ha a jövőben újra akarom generálni akkor az gigaszopóroller.
Ami 100% tiszta eddig számomra az az, hogy a kirajzoló objektumokból származtatnom kell egy subclasst ami a QGraphicsItemtől is származik és kirajzolja amit kell a propertyk alapján.

A jelenlegi tervem a következő:
- Elindulok a legfelsőbb objektum osztályától amit subclassolok úgy, hogy hozzáadom az addToScene metódust, majd ezt elkövetem a a fában lefelé egészen addig amíg a kirajzoló objektumokhoz nem érek el (azok már a QGraphicsItemtől is fognak származni) itt az addToScene a valós scenere helyezést végzi majd míg a fábasn felfelé mindössze a releváns tagváltozók ugyanezen metódusát hívogatja végig.
- A generált "főosztály" rendelkezik egy parse metódussal amit lefuttatok végighívja a parse metódusokat az objektumhierarchiában lefelé. Namost ha ezeket overridolom akkor itt kellene az objektumokhoz hozzáadni a saját addScene-vel rendelkező objektumaimat.
Itt három utat látok
- Maguknak a subclassolt osztályoknak a tagváltozóit overridolnám egy subclassolt tagváltozóval, azonban azok private-ok a generált kódban. Kézenfekvő lenne átírni a kxml_compilert úgy, hogy az protected membereket generáljon.
- Csinálok minden classhoz egy olyan subclasst ami másolókonstruktoral rendelkezik átmásolja a propertyket érték alapján és pazarlom a memóriát.
- Készítek egy független classt aminek a konstruktorában beadom az autogenerált objektum pointerét majd az autogenerált osztály metódusait implementálom oly módon, hogy azok a pointeren keresztül az autogenerált objektum metódusait hívogassák. Ez nem pazarol memóriát, cserébe rengeteg copy paste programming.

Ki hogyan menne tovább?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ha ez esetleg így érthetetlen akkor feltolom a githubra a kódot és jobb lesz.