| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
sodio Forista Nuevo


Miembro No. 27939 Registrado: May 15, 2008 Mensajes: 7
|
Publicado: Jue May 15, 2008 5:21 am Asunto: Programación con Qt |
|
|
|
Hola.
Soy nuevo por aquí y estoy dando mis primeros pasos en la programación en C++ con Qt.
Mi problema es que no consigo que me funcione correctamente un sencillísimo programa que he hecho. Este es el código (main.cpp):
| Código: | #include <QApplication>
#include <QWidget>
#include <QPushButton>
class MiVentana: public QWidget
{
public:
MiVentana (QWidget *parent=0);
public slots:
void botonPulsado();
};
MiVentana::MiVentana(QWidget *parent)
: QWidget(parent)
{
QPushButton *bSalir=new QPushButton("&Salir",this);
connect(bSalir,SIGNAL(clicked()),this,SLOT(botonPulsado())) ;
connect(bSalir,SIGNAL(clicked()),qApp,SLOT(quit()));
bSalir->show();
}
void MiVentana::botonPulsado()
{
printf("Botón pulsado\n");
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MiVentana ventana;
ventana.show();
return app.exec();
}
|
Compila perfectamente, pero me aparece el mensaje
| Código: | | Object::connect: No such slot QWidget::botonPulsado() |
y el botón no salta al slot botonPulsado.
¿Qué hago mal? Como se ve en el código el slot está creado en la clase, y a pesar de eso me dice que no existe.
Gracias y hasta pronto. |
|
| Volver arriba |
|
 |
zeka Forista Legendario


Miembro No. 8222 Registrado: Jun 07, 2005 Mensajes: 2123
|
Publicado: Jue May 15, 2008 7:29 am Asunto: Re: Programación con Qt |
|
|
|
No trabajo con programación orientada a objetos en la forma que tu requieres pero por lo que veo estás tratando de usar printf y, aparentemente, no has incluido la librería correspondiente. Por qué mejor no usas la librería de C++ que es <iostream> y luego haces referencia a cout en lugar de printf.
| Código: |
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <iostream>
using namespace std;
.
.
.
void MiVentana::botonPulsado()
{
cout << "Botón pulsado\n";
}
.
.
.
|
_________________ "Agua que no has de beber déjala correr"
Ultima edición por zeka el Jue May 15, 2008 7:54 am, editado 1 vez |
|
| Volver arriba |
|
 |
sodio Forista Nuevo


Miembro No. 27939 Registrado: May 15, 2008 Mensajes: 7
|
Publicado: Jue May 15, 2008 7:45 am Asunto: Re: Programación con Qt |
|
|
|
El problema no está ahí, está en que parece que no se reconoce el slot botonPulsado que he creado en la clase MiVentana.
Si cambio el printf por un simple return sigue sin funcionar.
De todas formas gracias por la atención y la idea.
Saludos. |
|
| Volver arriba |
|
 |
miguellucero Forista Nuevo


Miembro No. 26732 Registrado: Mar 03, 2008 Mensajes: 34
|
Publicado: Jue May 15, 2008 7:40 pm Asunto: Re: Programación con Qt |
|
|
|
mmmmmm Qt
| Código: |
public slots:
virtual void botonPulsado();
|
intenta eso.... a simple vista...
lo checo despues
suerte |
|
| Volver arriba |
|
 |
sodio Forista Nuevo


Miembro No. 27939 Registrado: May 15, 2008 Mensajes: 7
|
Publicado: Vie May 16, 2008 12:42 am Asunto: Re: Programación con Qt |
|
|
|
Pues no, parece que tampoco funciona.
Hace una semana que estoy dándole vueltas al tema y comprobando la información con los tutoriales de la página de trolltech pero no hay manera.
Gracias por la ayuda.
Saludos. |
|
| Volver arriba |
|
 |
sodio Forista Nuevo


Miembro No. 27939 Registrado: May 15, 2008 Mensajes: 7
|
Publicado: Sab May 17, 2008 8:01 am Asunto: Re: Programación con Qt |
|
|
|
Ya sé cómo hacerlo. Lo pongo aquí por si le interesa a alguien en el futuro.
Hay que dividir el programa en tres archivos.
Uno, el main.cpp, que será desde el que se ejecuta nuestra interface, que estará definida en otros dos archivos, uno de extensión .cpp y otro .h
No sé por qué no deja hacerlo todo en un sólo archivo. Aquí van mis tres archivos con este ejemplo simple.
main.cpp
| Código: |
#include <QApplication>
#include "formulario.h"
int main(int argc, char **argv) {
QApplication app(argc, argv);
MiVentana ventana;
ventana.show();
return app.exec();
}
|
formulario.h
| Código: |
#ifndef VENTANA_H
#define VENTANA_H
#include <QWidget>
#include <QPushButton>
class MiVentana : public QWidget {
Q_OBJECT
public:
MiVentana(QWidget *parent = 0);
public slots:
void botonPulsado();
};
#endif
|
formulario.cpp
| Código: |
#include "formulario.h"
#include <QApplication>
MiVentana::MiVentana(QWidget *parent): QWidget(parent) {
QPushButton *bSalir = new QPushButton("&Salir",this);
connect(bSalir,SIGNAL(clicked()),this,SLOT(botonPulsado()));
connect(bSalir,SIGNAL(clicked()),qApp,SLOT(quit()));
bSalir->show();
}
void MiVentana::botonPulsado()
{
printf("Botón pulsado\n");
return;
}
|
Así sí se puede acceder al slot creado. Pensaba que ya había probado esta opción, pero al seguir buscando y hacer más pruebas me ha funcionado.
Saludos. |
|
| Volver arriba |
|
 |
zeka Forista Legendario


Miembro No. 8222 Registrado: Jun 07, 2005 Mensajes: 2123
|
Publicado: Sab May 17, 2008 9:42 am Asunto: Re: Programación con Qt |
|
|
|
Por qué no lo montas también en tu blog de miembros de Espacio Linux. En mi caso, es más fácil recordar que el usuario sodio hizo algo útil al respecto y voy directamente allí. Cuando tengas en mente tener tu propio blog, a lo mejor ya lo tienes, transfieres tu información allí o viceversa. Mientras más se exponga la información más oportunidad tendrá de que sea aprovechada por otros. _________________ "Agua que no has de beber déjala correr" |
|
| Volver arriba |
|
 |
sodio Forista Nuevo


Miembro No. 27939 Registrado: May 15, 2008 Mensajes: 7
|
Publicado: Sab May 17, 2008 10:39 am Asunto: Re: Programación con Qt |
|
|
|
Bien, ya me miraré eso del blog en espaciolinux, a ver cómo funciona y si hace falta lo pongo.
Hasta otra y gracias. |
|
| Volver arriba |
|
 |
|