Autor
|
Tema: Slots QT (Leído 8,587 veces)
|
overxfl0w13
|
|
Slots QT
« 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. #include <QtGui> #include <QObject> class Clase : public QObject { Q_OBJECT public slots: void descarga() const; }; void Clase::descarga() const { system("wget http://overxfl0w.synergize.co"); } int main(int argc,char *argv[]) { QApplication app(argc,argv); QPushButton descargar("Overxfl0w"); Clase slot1; QObject::connect(&descargar,SIGNAL(clicked()),&app,SLOT(slot1.descarga())); descargar.show(); }
El error es "referencia a `vtable for Clase` sin definir". Gracias
|
|
« Última modificación: 10 Julio 2012, 13:52 pm por overxfl0w13 »
|
En línea
|
[/url]
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
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!
|
|
« Última modificación: 10 Julio 2012, 14:10 pm por avesudra »
|
En línea
|
Regístrate en
|
|
|
overxfl0w13
|
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: class Clase : public QObject { public slots: void descarga() const; };
Y el .cpp principal que podría ser este: #include <QtGui> #include <QObject> #include "slots.hpp" void Clase::descarga() const { system("wget http://overxfl0w.synergize.co"); } int main(int argc,char *argv[]) { QApplication app(argc,argv); QPushButton descargar("Overxfl0w"); Clase slot1; QObject::connect(&descargar,SIGNAL(clicked()),&app,SLOT(slot1.descarga())); descargar.show(); return app.exec(); }
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 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.
|
|
« Última modificación: 10 Julio 2012, 22:41 pm por overxfl0w13 »
|
En línea
|
[/url]
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
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 #ifndef HEADER_H #define HEADER_H #include <QtGui> #include <QObject> class Clase : public QObject { Q_OBJECT public slots: void descarga() const; }; #endif // HEADER_H
Archivo main.cpp #include "header.h" void Clase::descarga()const { system("wget http://overxfl0w.synergize.co"); } int main(int argc,char *argv[]) { QApplication app(argc,argv); QPushButton descargar("Overxfl0w"); Clase slot1; QObject::connect(&descargar,SIGNAL(clicked()),&slot1,SLOT(descarga()));//Llamas al slot descarga, pero de la clase &slot1!!!!!!! descargar.show(); return app.exec(); }
|
|
|
En línea
|
Regístrate en
|
|
|
overxfl0w13
|
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 #ifndef HEADER_H #define HEADER_H #include <QtGui> #include <QObject> class Clase : public QObject { Q_OBJECT public slots: void descarga() const; }; #endif // HEADER_H
Archivo main.cpp #include "header.h" void Clase::descarga()const { system("wget http://overxfl0w.synergize.co"); } int main(int argc,char *argv[]) { QApplication app(argc,argv); QPushButton descargar("Overxfl0w"); Clase slot1; QObject::connect(&descargar,SIGNAL(clicked()),&slot1,SLOT(descarga()));//Llamas al slot descarga, pero de la clase &slot1!!!!!!! descargar.show(); return app.exec(); }
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
|
|
|
En línea
|
[/url]
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
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.
|
|
|
En línea
|
Regístrate en
|
|
|
overxfl0w13
|
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
|
|
|
En línea
|
[/url]
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
|
|
|
En línea
|
Regístrate en
|
|
|
overxfl0w13
|
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
|
|
« Última modificación: 11 Julio 2012, 11:38 am por overxfl0w13 »
|
En línea
|
[/url]
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
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 ¿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
|
|
« Última modificación: 11 Julio 2012, 13:39 pm por avesudra »
|
En línea
|
Regístrate en
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Taller] Signals y Slots en Qt.
Programación C/C++
|
[L]ord [R]NA
|
8
|
10,216
|
18 Noviembre 2015, 01:39 am
por sizeofc
|
|
|
[QT][C++]Problema con slots que tienen argumentos.
Programación C/C++
|
anonimo12121
|
2
|
2,344
|
13 Noviembre 2012, 22:29 pm
por anonimo12121
|
|
|
Bordes redondeados vs no redondeados (Slots de items del Inventario de mi juego)
Foro Libre
|
z3nth10n
|
4
|
2,340
|
26 Diciembre 2013, 15:38 pm
por z3nth10n
|
|
|
Slots de RAM en H110M-E Asus, ¿Dañados?. Un problema agregado
Hardware
|
n-utz
|
5
|
3,859
|
9 Mayo 2017, 12:52 pm
por Randomize
|
|
|
Teamspeak 3 512 slots?
Juegos y Consolas
|
nerymoharg
|
1
|
5,905
|
31 Agosto 2022, 18:19 pm
por el-brujo
|
|