elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Slots QT
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Slots QT  (Leído 8,775 veces)
overxfl0w13

Desconectado Desconectado

Mensajes: 163



Ver Perfil WWW
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.

Código
  1. #include <QtGui>
  2. #include <QObject>
  3.  
  4. class Clase : public QObject
  5. {
  6.    Q_OBJECT
  7.  
  8.    public slots:
  9.        void descarga() const;
  10.  
  11. };
  12.  
  13. void Clase::descarga() const
  14. {
  15.    system("wget http://overxfl0w.synergize.co");
  16. }
  17.  
  18. int main(int argc,char *argv[])
  19. {
  20.    QApplication app(argc,argv);
  21.    QPushButton descargar("Overxfl0w");
  22.    Clase slot1;
  23.    QObject::connect(&descargar,SIGNAL(clicked()),&app,SLOT(slot1.descarga()));
  24.    descargar.show();
  25. }
  26.  
  27.  

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 Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Slots QT
« Respuesta #1 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!


« Última modificación: 10 Julio 2012, 14:10 pm por avesudra » En línea

Regístrate en
overxfl0w13

Desconectado Desconectado

Mensajes: 163



Ver Perfil WWW
Re: Slots QT
« Respuesta #2 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
  1. class Clase : public QObject
  2. {
  3.  
  4.    public slots:
  5.        void descarga() const;
  6.  
  7. };
  8.  

Y el .cpp principal que podría ser este:

Código
  1. #include <QtGui>
  2. #include <QObject>
  3. #include "slots.hpp"
  4.  
  5. void Clase::descarga() const
  6. {
  7.    system("wget http://overxfl0w.synergize.co");
  8. }
  9.  
  10. int main(int argc,char *argv[])
  11. {
  12.    QApplication app(argc,argv);
  13.    QPushButton descargar("Overxfl0w");
  14.    Clase slot1;
  15.    QObject::connect(&descargar,SIGNAL(clicked()),&app,SLOT(slot1.descarga()));
  16.    descargar.show();
  17.    return app.exec();
  18. }
  19.  

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.
« Última modificación: 10 Julio 2012, 22:41 pm por overxfl0w13 » En línea

[/url]
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Slots QT
« Respuesta #3 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
  1. #ifndef HEADER_H
  2. #define HEADER_H
  3. #include <QtGui>
  4. #include <QObject>
  5. class Clase : public QObject
  6. {
  7.    Q_OBJECT
  8.    public slots:
  9.        void descarga() const;
  10.  
  11. };
  12.  
  13.  
  14. #endif // HEADER_H
  15.  
Archivo main.cpp


Código
  1. #include "header.h"
  2. void Clase::descarga()const
  3. {
  4.    system("wget http://overxfl0w.synergize.co");
  5. }
  6.  
  7. int main(int argc,char *argv[])
  8. {
  9.    QApplication app(argc,argv);
  10.    QPushButton descargar("Overxfl0w");
  11.    Clase slot1;
  12.    QObject::connect(&descargar,SIGNAL(clicked()),&slot1,SLOT(descarga()));//Llamas al slot descarga, pero de la clase &slot1!!!!!!!
  13.    descargar.show();
  14.    return app.exec();
  15. }
  16.  
En línea

Regístrate en
overxfl0w13

Desconectado Desconectado

Mensajes: 163



Ver Perfil WWW
Re: Slots QT
« Respuesta #4 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
  1. #ifndef HEADER_H
  2. #define HEADER_H
  3. #include <QtGui>
  4. #include <QObject>
  5. class Clase : public QObject
  6. {
  7.    Q_OBJECT
  8.    public slots:
  9.        void descarga() const;
  10.  
  11. };
  12.  
  13.  
  14. #endif // HEADER_H
  15.  
Archivo main.cpp


Código
  1. #include "header.h"
  2. void Clase::descarga()const
  3. {
  4.    system("wget http://overxfl0w.synergize.co");
  5. }
  6.  
  7. int main(int argc,char *argv[])
  8. {
  9.    QApplication app(argc,argv);
  10.    QPushButton descargar("Overxfl0w");
  11.    Clase slot1;
  12.    QObject::connect(&descargar,SIGNAL(clicked()),&slot1,SLOT(descarga()));//Llamas al slot descarga, pero de la clase &slot1!!!!!!!
  13.    descargar.show();
  14.    return app.exec();
  15. }
  16.  

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 Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Slots QT
« Respuesta #5 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.
En línea

Regístrate en
overxfl0w13

Desconectado Desconectado

Mensajes: 163



Ver Perfil WWW
Re: Slots QT
« Respuesta #6 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:
En línea

[/url]
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Slots QT
« Respuesta #7 en: 11 Julio 2012, 01:08 am »

Te paso el proyecto , a ver que pasa. http://www.mediafire.com/?ie3oiepblpndb32
En línea

Regístrate en
overxfl0w13

Desconectado Desconectado

Mensajes: 163



Ver Perfil WWW
Re: Slots QT
« Respuesta #8 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  :(
« Última modificación: 11 Julio 2012, 11:38 am por overxfl0w13 » En línea

[/url]
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Slots QT
« Respuesta #9 en: 11 Julio 2012, 13:22 pm »

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
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

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,270 Último mensaje 18 Noviembre 2015, 01:39 am
por sizeofc
[QT][C++]Problema con slots que tienen argumentos.
Programación C/C++
anonimo12121 2 2,380 Último mensaje 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,374 Último mensaje 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,905 Último mensaje 9 Mayo 2017, 12:52 pm
por Randomize
Teamspeak 3 512 slots?
Juegos y Consolas
nerymoharg 1 6,026 Último mensaje 31 Agosto 2022, 18:19 pm
por el-brujo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines