qdacco 0.5 amb qt 4.2. La història

(Ull! entrada una mica tècnica i de llargada el triple del normal!)

Fa massa dies que no escric. No és que deixi l’informàtica sinó que he estat fent una nova versió del programa qdacco. Per Setmana Santa passada ja vaig escriure alguna referència al programa.

La nova versió ha estat especialment moguda. Per setmana Santa passada vaig fer (amb l’ajuda del Jordi) la versió 0.4 amb Qt 3.x, amb la mateixa versió que l’havia començat mig any abans. Vaig pensar que a l’estiu durant l’Euskal Encounter en faria una nova versió, amb unes noves funcionalitats i la migració a Qt 4. Pensava que la migració a Qt 4 seria “fàcil” (qüestió d’hores, 4 o 6, per aprendre diferències i fer la migració). Durant l’Euskal ho vaig intentar i no vaig poder, tampoc vaig tenir el temps i concentració suficients. Però ja hi vaig estar unes quantes hores.

qdacco, migrar de Qt3 a Qt4

Es pot migrar de Qt3 a Qt4 d’almenys dues maneres:

  • Fent servir el programa qt3to4. Aquest programa hauria d’agafar el projecte, fer els canvis necessaris per utilitzar les classes de compatibilitat de Qt4. Aquestes classes són perquè els Widgets han canviat força. el QPushButton d’abans es pot seguir utilitzant amb el nom Q3PushButton (o similar). El nou QPushButton té algunes diferències.
  • Fer-ho tot de cop: mirar quins mètodes o comportaments han canviat i adaptar el codi, sense temes de compatibilitat i amb Qt4 100%.

A l’Euskal vaig intentar el mètode de compatibilitat i no em va anar bé. He llegit gent a Internet que li va anar perfecte, amb coses més grans que qdacco, però a mi no em compilava (horrible!) i si adaptava temes a mà al final podia compilar però sortia un Widget en blanc enlloc del qdacco. Després de l’Euskal ho vaig deixar fins fa unes setmanes.

Fa unes setmanes el qt3to4 tampoc em va funcionar “de sèrie”, i vaig decidir passar-ho tot a Qt 4 i deixar-se de compatibilitats, ja que vaig preveure que seria la mateixa feina fer anar bé el programa amb qt3to4 i modificacions a mà que adaptar-lo per fer-lo anar amb Qt 4.
El disseny gràfic el vaig poder importar quasi tot (alguns detalls no, però res greu). A partir d’aquí vaig anar fent els signals/slots de Qt (events en altres entorns) i copiar-enganxar de codi amb la nova estructura del programa, que ha canviat una mica (no entro amb més detalls). Vaig anar compilant i anar veient que alguns mètodes han canviat de nom, o alguns mètodes no tenen un equivalent directe i cal repensar-ho una mica, ajustar, etc.

Va ser una feina força entretinguda. Va ser més difícil començar-ho a fer, entendre com anaven els canvis que havien fet que fer la feina, molt rutinària tota. També sortosament algunes classes van anar sense canvis (com el parser XML).

Aventura Debian

Tenia plans de posar-hi algunes noves funcionalitats (i força interessants!). Vaig enviar un mail al mantenidor de qdacco de Debian per saber quan es congelava Debian, que crec que ja porta mesos de retard 🙂 (res anormal). La resposta del mantenidor va ser: hi ha paquets bàsics congelats, el dia 18 d’octubre es tanquen tots els paquets. Quan m’ho va dir hi havia el qdacco amb Qt 4 però no massa polit, i quedaven 11 o 12 dies. Però s’en necessiten uns 7 o 10 perquè el paquet passi d’unstable a testing (un cop a testing pot entrar per la nova versió)Vaig passar-li el paquet perquè anés fent proves, i jo vaig estar polint amb recomanacions del Jordi a nivell gràfic, cadenes de texte mal traduïdes, i fins i tot vaig afegir nous camps que ara qdacco ensenya del diccionari Dacco i enllaços a fotos o adreces Flickr. La versió que dona qdacco no és comparable amb la que donava abans (i vergonya em fa, va ser un error d’omissió greu!). Si algú ho fa servir, que provi de buscar “take” abans i ara 🙂

Just fa 2 dies rebo un mail del sistema “compilador” de Debian: qdacco no compilava. Estrany! No veia si era per una arquitectura en concret o per totes. En Miguel Gea m’ho diu: han entrat les Qt 4.2(*) (i no 4.1 com fins ara) i no compila qdacco! I ja queda molt poc temps! En aquests moments és quan un pensa que Debian encara és massa arriscada: què és això d’entrar llibreries 10 dies abans de congelar-la?! Ajuda a veure les coses: quan un és usuari ho vol tot a l’última. Quan un està a l’altre costat de desenvolupador vol coses més provades, no actualitzar d’aquesta manera, etc.
Cal entrar el nou paquet, i evidentment no hi ha ningú que hagi tingut aquest problema. Després de mirar i remirar, i posar-me les Qt 4.2 i provar el programa, provar eemples de trossos del què fallava, etc. veig que el constructor de còpia d’una classe, que hereto d’una altra, no funciona. Manera de fer el “workaround”: no passar l’objecte perquè es copiï per valor a un altre mètode, sinó passar una referència a l’objecte. De fet, passar la referència és més ràpid i millor, en aquest cas (ho podria haver fet des del començamanet). No entenc aquesta errada, sembla una errada de Qt, ho revisaré amb calma els propers dies. Un altre cop preparar la versió per pujar a Sourceforge, enviar el mail a en Miguel, etc.

Va bé de tant en tant veure les coses des d’una altre perspectiva. Quan un és usuari, vol tot l’últim. Quan s’està a l’altre costat es maleix (a vegades) aquest tema.

Qt 4

Unes paraules sobre les Qt 4: ha millorat/renovat l’aspecte dels Widgets. Qt són uns llibreries molt completes i potents, i amb molts detalls bons (amb Qt 4 algun detall bo afegeixen). Quan has de migrar es fa molt pesat i les maleixes!Amb la versió de qdacco executant-se amb un Windows XP ara els botons són els arrodonits del Windows, els més moderns. Abans eren més antics, no passa res però executant els dos de costat salta a la vista. Així amb altres widgets i sistemes operatius. Els quadres de diàleg d’obrir/tancar també han canviat i són força millors, almenys el que proposa per GNU/Linux.

Unes paraules sobre programari lliure i canviar l’API: a vegades parlant amb gent, diuen que el programari lliure cuida poc les API’s i que són massa canviants. No ho sé, no m’ho sembla exageradament (llibreries bàsiques del sistema tenen la mateixa API de fa molts anys, per exemple). I Qt és lliure, però justament ho desenvolupa una empresa (Trolltech) i tenen força clients. Així que, tot i que tenen una versió lliure, estan desenvolupades per una empresa i aquesta aplica suposo el què les empreses solen fer. I aquest cop ha tocat “canvi d’API”. A mi m’ha costat unes hores, endevino que a KDE els hi haurà costat/costa encara més.

També es pot veure com que qui canvia d’API (no cada setmana!) és que evoluciona, de certa manera. Així que no cal ser sempre mal pensats.

(*) (Qt 4.2)

L’API de Qt 4.1 a Qt 4.2 no hauria de canviar. Amb Qt 4.2 s’afegeixen funcionalitats, de fet una cosa que em va costar de fer amb Qt 4.1 (unes quantes hores per la tonteria) amb Qt 4.2 vaig veure que era immediat: ho implementaven les Qt i no jo. El problema amb qdacco va ser que amb Qt 4.2 el constructor de còpia d’una classe no funciona (sembla un bug, no ho puc assegurar). La solució un cop identificat el problema va ser fàcil: no passar l’objecte sinó una referència a aquest.

Baixar qdacco

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>