libreria Qt en Dev-cpp

Warren
23 de Junio del 2006
hola,
gracias por vuestra atencion, ahi va mi problema:

Me he interesado por la libreria Qt para mis proyectos en Windows. Habituado a programar con el IDE de Bloodshed, el Dev-cpp, he decidido intentar configurarlo para mi mayor comodidad. No he tenido problema al linkar las librerias ni en compilaciones muy básicas, pero me ha surgido un problema al intentar crear mis propios Signals y Slots. El problema es q al crear mi propia clase donde definiré mis slots/signals, debo poner en la cabecera de la declaracion Q_OBJECT, lo q me produce los siguientes errores de linkado:

SaveButton.cpp: undefined reference to `vtable for SaveButton'
SaveButton.cpp: undefined reference to `SaveButton::staticMetaObject

Buscando en la documentacion de las librerias me he encontrado con el Meta-Object System de Qt. Este sistema, segun entendi, mantiene las relaciones entre los signals y slots de una clase, por lo tanto cuando quiera crear mi propia clase con signals/slots definidos por mi tendre q someterla a este sistema mediante el MOC (Meta-Object Compiler).
Aqui es donde me he perdido del todo, mirando la documentacion no he comprendido la sintaxis del comando. Y lo q para mi es mas importante, no he visto manera de integrar el comando moc con mi Dev-cpp.
Esta es mi pregunta:
¿Puedo utilizar mi Dec-cpp directamente para compilar el codigo y los Meta-Objects a un mismo tiempo?
¿Como se utiliza el comando MOC?

hiei
23 de Junio del 2006
Bueno... el DevC++ usa MingW de fondo asi que no deveria haber problema con las Qt4 para Windows pero... creo que el problema viene por el lado de como maneja DevC++ la compilacion.
Segun trolltech, para trabajar con las librerias Qt debes primer, crear un directorio con los fuentes y demas... luego ejecutar qmake... que crea un makefile con la informacion de nuestra plataforma/compilador/vercion-de-las-librerias y finalmente make...

DevC++ no tiene ni idea de esto asi que cuando necesitas pasar tus clases por el moc las tienes que pasar tu mismo...

Crear el makefile para las Qt es un tanto complicado, pero intentare hacerlo simple...

Los archivos .cpp/.h normales (o sea, sin declaraciones de clases derivadas de QObject) se compilan como siempre...
Basicamente, todos los archovos .h que contengan declaraciones de objetos QObject deves pasarse por el comando moc (detayes de uso en: http://doc.trolltech.com/4.0/moc.html) basicamente haces por cada archivo:

moc -i archivo_entrada.h -o archivo_salida.cpp.moc

Suerte...

Warren
23 de Junio del 2006
Muchas gracias por tu ayuda!!
a partir de lo q me has dicho he seguido investigando en el Dev-cpp. Como me habias sugerido podria pasar el moc a mano con el commando:

moc -f in.h -o out.moc.cpp
(he cambiado el -i por -f para q conservara el include en el nuevo archivo)

Luego lo unico q hay q hacer es añadir ese archivo al proyecto y compilar.
Lo unico q me quedaba por solucionar era hacer q el Dev-cpp ejecutara por si mismo el moc antes de compilar. Esto lo solucioné de la siguiente manera:

En mi proyecto habia creado una clase QObject llamada SaveButton.
De la manera q lo he conseguido hacer, la primera ejecucion del moc la realicé a mano, a partir de aqui no, lo q me genero
el archivo SaveButton.moc.cpp
Añadi el archivo al proyecto y configuré lo siguiente:

en ProyectoOpciones del Proyecto
en la pestaña Archivos
seleccioné el archivo Savebutton.cpp, marqué la casilla de verificacion de Anteponer a la Construccion y añadí el comando moc (con los parametro anteriores) antes de la line ya existente.
Es mucho mejor crear un .bat donde vayas añadiendo lineas del comando moc para cada fichero .h de tu proyecto y solo añadir una vez el fichero bat en la anteposicion de la construccion.

Y ya esta!!! a partir de ahi antes de cada compilacion se pasa el moc por todos los archivos de tu proyecto. Decir q es un comando liviano y q no ralentiza en exceso la compilacion del proyecto, en caso de compilar sin hacer cambios en las clases QObject.


Estaba pensando en hacer un pequeño documento con los pasos q hay q realizar ,desde q se descarga la libreria, para configurarla con el Dev-cpp.
Si os parece util, lo hago, y lo subo

gracias por la ayuda
Un Saludo!!