Título: Slots QT Publicado por: overxfl0w13 en 10 Julio 2012, 13:20 pm Estaba buscando documentación de Qt y la verdad es que hay bastante buena, pero no consigo encontrar una buena explicación sobre como hacer mis propios slots. Lo que quiero hacer, es que al pulsar un botón determinado se descargue mediante wget un archivo.
¿ Alguien sabe de algún sitio o puede dar una breve explicación?. EDIT: más o menos tengo la idea de como hacerlo pero se me está quedando grande, tengo éste code, pero hay cosas que no me cuadran. Código
El error es "referencia a `vtable for Clase` sin definir". Gracias :) Título: Re: Slots QT Publicado por: avesudra en 10 Julio 2012, 13:59 pm Este es tu problema http://foro-c.com/blog/qt-error-undefined-reference-to-vtable-when-q_object/ tienes que estructurar bien el código en diferentes archivos en Qt , así que me parece que es mejor empezar un proyecto Qt Gui que te estructura las cosas.
PD: Para probar que es eso , sólo quita la macro Q_OBJECT verás como compila. En cuanto a la explicación , te digo que no sé casi nada de Qt , pero supuestamente para crear tus propios slots es como crear una función miembro dentro de una clase normal y corriente. ¡Un saludo! Título: Re: Slots QT Publicado por: overxfl0w13 en 10 Julio 2012, 21:57 pm Este es tu problema http://foro-c.com/blog/qt-error-undefined-reference-to-vtable-when-q_object/ tienes que estructurar bien el código en diferentes archivos en Qt , así que me parece que es mejor empezar un proyecto Qt Gui que te estructura las cosas. PD: Para probar que es eso , sólo quita la macro Q_OBJECT verás como compila. En cuanto a la explicación , te digo que no sé casi nada de Qt , pero supuestamente para crear tus propios slots es como crear una función miembro dentro de una clase normal y corriente. ¡Un saludo! Entonces, yo podría hacer la clase en un archivo .hpp, que sería este: Código
Y el .cpp principal que podría ser este: Código
Hasta ahí bien, pero estamos en las mismas de antes, si dejo el Q_OBJECT en la declaración de la clase, sigue dando el mismo error y si lo quito, me dice: "Object::connect No such slot QApplication::slot1.descarga()" El problema creo que reside en esta linea: QObject::connect(&descargar,SIGNAL(clicked()),&app,SLOT(slot1.descarga())); El slot ( si no me equivoco ) es la salida que se produce sobre el objeto que se pasa por referencia anteriormente, vamos, &app y en la declaración de su clase QApplication no existe el el método indicado en el SLOT -> (slot1.descarga()) Crees que si en su code le añado el nuevo método funcionará?. Un saludo y gracias por tu respuesta avesudra :D EDIT: La cosa ya está clara respecto a lo de &app, he creado la ventana desde una clase propia, con sus widgets correspondientes, ahora el problema solo está en el Q_OBJECT, por mucho que esté únicamente en el archivo de declaración de la clase, es como si no lo tuviese en cuenta y me sigue dando el error de vtable, si lo quito pasa igual que antes. Título: Re: Slots QT Publicado por: avesudra en 10 Julio 2012, 22:52 pm Claro es que está buscando el método en la clase QApplication y ahí no existe! En cuento a lo de Q_OBJECT a mi me funciona así.
Archivo header.h Código Archivo main.cpp Código
Título: Re: Slots QT Publicado por: overxfl0w13 en 10 Julio 2012, 23:40 pm Claro es que está buscando el método en la clase QApplication y ahí no existe! En cuento a lo de Q_OBJECT a mi me funciona así. Archivo header.h Código Archivo main.cpp Código
Con eso me sigue sin funciona avesudra y no sé porque, te dejo el reporte: Compiling: C:\Users\Overxfl0w\Desktop\SLOTSFINISH\main.cpp Linking console executable: C:\Users\Overxfl0w\Desktop\SLOTSFINISH\main.exe C:\Users\Overxfl0w\Desktop\SLOTSFINISH\main.o:main.cpp:(.text$_ZN5ClaseC1Ev[Clase::Clase()]+0x20): referencia a `vtable for Clase' sin definir C:\Users\Overxfl0w\Desktop\SLOTSFINISH\main.o:main.cpp:(.text$_ZN5ClaseD1Ev[Clase::~Clase()]+0xb): referencia a `vtable for Clase' sin definir collect2: ld devolvió el estado de salida 1 Process terminated with status 1 (0 minutes, 11 seconds) 0 errors, 0 warnings No sé a que viene eso seguiré mirando a ver, gracias por la ayuda :) Título: Re: Slots QT Publicado por: avesudra en 11 Julio 2012, 00:20 am Mmmmm que raro , prueba a poner la extensión del archivo de cabecera como .h en vez de como .hpp a ver si va a ser eso.
Título: Re: Slots QT Publicado por: overxfl0w13 en 11 Julio 2012, 00:51 am Mmmmm que raro , prueba a poner la extensión del archivo de cabecera como .h en vez de como .hpp a ver si va a ser eso. Si, también lo he probado y obtengo la misma salida :huh: Título: Re: Slots QT Publicado por: avesudra en 11 Julio 2012, 01:08 am Te paso el proyecto , a ver que pasa. http://www.mediafire.com/?ie3oiepblpndb32
Título: Re: Slots QT Publicado por: overxfl0w13 en 11 Julio 2012, 11:34 am Te paso el proyecto , a ver que pasa. http://www.mediafire.com/?ie3oiepblpndb32 Uso CodeBlocks, voy a probar con Qt Creator a ver si hay suerte :). Con Qt Creator funciona de lujo Gracias tio ;-), de todas formas quería hacerlo desde CodeBlocks :( Título: Re: Slots QT Publicado por: avesudra en 11 Julio 2012, 13:22 pm Uso CodeBlocks, voy a probar con Qt Creator a ver si hay suerte :). ¿Tienes bien configurado codeblocks con Qt?Con Qt Creator funciona de lujo Gracias tio ;-), de todas formas quería hacerlo desde CodeBlocks :( EDITO: Mira lo que pone al final http://unadequeso.blogspot.com.es/2008/06/instalar-qt-con-codeblocks.html Título: Re: Slots QT Publicado por: overxfl0w13 en 11 Julio 2012, 14:07 pm ¿Tienes bien configurado codeblocks con Qt? EDITO: Mira lo que pone al final http://unadequeso.blogspot.com.es/2008/06/instalar-qt-con-codeblocks.html Aaaah ahí estaba la cosa, seguí ese tutorial y se me pasó la parte última jaja gracias tio ;-). En unos días subiré un chat que estoy haciendo con los sockets de qt me gustaría que lo probarás es en parte tuyo por la ayuda ;) Un saludo tio :) Título: Re: Slots QT Publicado por: avesudra en 11 Julio 2012, 14:16 pm ¡Anda ya como va a ser mío , el trabajo del code es tuyo! Claro que te lo pruebo ¡y con mucho gusto!
¡Un saludo! Título: Re: Slots QT Publicado por: anonimo12121 en 11 Julio 2012, 17:02 pm ;) over no me líes más con las herencias xD
Título: Re: Slots QT Publicado por: overxfl0w13 en 12 Julio 2012, 15:29 pm calla cabron y metete al skype jaja
Título: Re: Slots QT Publicado por: X3R4CK3R en 14 Julio 2012, 23:31 pm Pff, llevo el día de hoy entero buscando solución a esto y por fin la he hayado... ahí va:
El problema reside en que necesitas un archivo "moc" por cada header relacionado con Q_OBJECT que tengas en tu proyecto. Si tu proyecto consta de los siguientes archivos: main.cpp, chat.cpp, y chat.hpp, necesitas generar un moc_chat.cpp. De esto se encarga el ejecutable moc.exe, que podrás encontrar en la carpeta bin (en la carpeta de instalación de Qt). En fin, cómo hacer esto en Code::Blocks? Pues vamos a Tools/Configure Tools.../Add y rellenamos: Citar Name: MOC Executable: Path/to/moc.exe (En mi caso: C:\QtSDK\Desktop\Qt\4.8.1\mingw\bin\moc.exe) Parameters: ${ACTIVE_EDITOR_FILENAME} -o moc_${ACTIVE_EDITOR_STEM}.cpp Working Directory: ${PROJECT_DIR} Y esto nos generará el archivo que necesitamos, basta con tener abierto el header y ejecutar la tool. Acto seguido, incluimos éste nuevo archivo al proyecto de Code::Blocks y compilamos, y si todo ha ido bien, deberían desaperecer esos horribles y tenebrosos "Undefined reference to 'vtable'" que tanto me han perturbado estos últimos días xD Espero les sirva EDIT: Es necesario crear un proyecto de Qt4 (No funciona con Empty file) Fuente: http://forums.codeblocks.org/index.php?topic=13420.0 Saludos! Título: Re: Slots QT Publicado por: avesudra en 15 Julio 2012, 01:32 am ¡Buen aporte! Le servirá a mucha gente XeRaCKeR, ¡gracias por avisar! ;-)
|