Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Qt con interfaz a consola

Estas en el tema de Qt con interfaz a consola en el foro de C/C++ en Foros del Web. Hola amigos, felices fiestas. He estado buscado la manera de enviar un correo desde tu propia cuenta de gmail a ti mismo mediante c++, gracias ...
  #1 (permalink)  
Antiguo 25/12/2016, 19:54
 
Fecha de Ingreso: junio-2014
Mensajes: 139
Antigüedad: 3 años, 3 meses
Puntos: 1
Qt con interfaz a consola

Hola amigos, felices fiestas.

He estado buscado la manera de enviar un correo desde tu propia cuenta de gmail a ti mismo mediante c++, gracias al usuario eferion he podido encontrar una implementación lo más simple posible pero en qt (link). El usuario Raivis (en el link) puso a disposición sus archivos fuentes en git y hace exactamente eso, enviar un correo mediante código. Y funciona.

El problema es que quiero adaptar dicho proyecto (qué usa ventanas) al mío que quiero que sea en consola; manejo c++ pero Qt muy poco, pero estuve buscando la forma de hacer esa transformación, enlazando los header y todo. Pero no he logrado hacerlo funcionar, específicamente el error que encuentro es éste:

Uso 4 archivos, que creo son los necesarios para hacer funcionar el programa, los otros creo que son para el manejo de la interfaz. Los 4 son:

- main.cpp
- sendEmail.pro
- smtp.cpp
- smtp.h

Uso Los archivos smtp.cpp y smtp.h son los mismos que usa Raivis en su código. el problema aparece en la función connect que no la reconoce.

Podrían darme algo de luz en éste asunto? muchas gracias!!!

Código C++:
Ver original
  1. ////////////////////////////// main.cpp//////////////////////////////////////////////////
  2. #include <QCoreApplication>
  3. #include <iostream>
  4. #include "smtp.h"
  5.  
  6. using namespace std;
  7.  
  8. int main(int argc, char *argv[]){
  9.     QCoreApplication a(argc, argv);
  10.     cout << "Envíar un correo." << endl;
  11.  
  12.     Smtp* smtp = new Smtp("[email protected]", "correoprueba", "smtp.gmail.com");
  13.     connect(smtp, SIGNAL(status(QString)), this, SLOT(mailSent(QString)));      //  <------------------ Aquí se genera el ERROR
  14.     smtp->sendMail("[email protected]", "[email protected]" , "This is a subject","This is a body");
  15.  
  16.     cout << "Envíado";
  17.     return a.exec();
  18. }
  19. //////////////////////////////////////// sendEmail.pro //////////////////////////////////
  20. QT += core
  21. QT -= gui
  22.  
  23. CONFIG += c++11
  24.  
  25. TARGET = sendEmail
  26. CONFIG += console
  27. CONFIG -= app_bundle
  28.  
  29. TEMPLATE = app
  30.  
  31. SOURCES += main.cpp \
  32.     smtp.cpp
  33.  
  34. # The following define makes your compiler emit warnings if you use
  35. # any feature of Qt which as been marked deprecated (the exact warnings
  36. # depend on your compiler). Please consult the documentation of the
  37. # deprecated API in order to know how to port your code away from it.
  38. DEFINES += QT_DEPRECATED_WARNINGS
  39.  
  40. # You can also make your code fail to compile if you use deprecated APIs.
  41. # In order to do so, uncomment the following line.
  42. # You can also select to disable deprecated APIs only up to a certain version of Qt.
  43. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
  44.  
  45. HEADERS += \
  46.     smtp.h \

Saludos,
  #2 (permalink)  
Antiguo 27/12/2016, 18:16
 
Fecha de Ingreso: junio-2014
Mensajes: 139
Antigüedad: 3 años, 3 meses
Puntos: 1
Respuesta: Qt con interfaz a consola

Según mi entendimiento, el proyecto facilitado por el usuario Raivis está diseñado para usar una interfaz. La función connect ya sé que se trata de una función de qt de la parte gráfica. Jeje siempre había trabajado en consola.

Bueno pues éste parece que será mi primer programa con una interfaz. Ya funciona y daré por terminado éste hilo.

Saludos,
  #3 (permalink)  
Antiguo 29/12/2016, 14:30
 
Fecha de Ingreso: septiembre-2010
Mensajes: 475
Antigüedad: 7 años
Puntos: 10
Respuesta: Qt con interfaz a consola

Sólo un pequeño apunte, los slots son funciones y como tal puedes usarlas. Es decir, que el mecanismo de activar una señal sobre un widget y que ésta señal llame al slot para que se ejecute, lo puedes hacer de forma "manual" implementando la llamada desde tu código de la consola.

Saludos!
__________________
Mi calculadora en Qt
  #4 (permalink)  
Antiguo 02/01/2017, 01:39
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 2 años, 11 meses
Puntos: 204
Respuesta: Qt con interfaz a consola

connect es una función implementada en QObject, objeto básico de Qt que no tiene ningún conocimiento de interfaces de usuario.

En lo que sí es especial connect es en que hace uso de los metadatos del objeto, por lo que si el objeto en cuestión no implementa la macro Q_OBJECT el sistema de señales no funcionará. Si aun así las señales siguen sin activarse entonces habrá que reconstruir el fichero qmake para que el proyecto pueda recompilar los metadatos del objeto.

Por tanto, el sistema de señales y slots se puede usar pefectamente en un entorno de consola. Lo que sucede es que las consolas suelen ser menos interactivas que las interfaces gráficas de windows, por lo que hay que ser más cuidadosos con el uso de este mecanismo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:32.