-
Hola estoy tratantando hacer qué, desde mi ventana principal (MainWindow) el texto dentro de un lineEdit lo pueda usar en otro formulario, estoy intentando con sinal/slots pero no logro hacerlo funcionar
aquí el código de como lo intento://///////////////////////////////////////MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_Hnamespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
signals:void capturar_correo();
public slots:
void guardar_correo(QString correo);
private:
Ui::MainWindow *ui;
};////////////////////////////MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);connect(MainWindow,SIGNAL(capturar_correo()),MainWindow,SLOT(guardar_correo(QString)));
}
void MainWindow::guardar_correo(QString correo){
correo = ui->lineEdit_correo->text();
}//////////////////////////////////////////////////Formilario2.h
signals:
void recibir_correo(QString correo);////////////////////////////////////////////////Formulario2.cpp
connect(Formulario2,SIGNAL(recibir_correo(QString correo)),MainWindow,SLOT(guardar_correo(QString correo)));
y para querer recibir el texto emito la señal en formulario2.cpp
asiemit recibir_correo(QString);
/////////////////////////////////////////////////////////////////////
y cuando habro el formulario2 con el boton emito la señal del connect en Mainwindow asi:
emit capturar_correo();
////////////////////////////////////////////////////////////////////////
pero me salen los siguientes errores:
mainwindow.cpp:20:error: expected primary-expression before ‘,’ token
connect(MainWindow,SIGNAL(capturar_correo()),MainWindow,SLOT(guardar_correo(QString)));
^
mainwindow.cpp:20: error: expected primary-expression before ‘,’ token
connect(MainWindow,SIGNAL(capturar_correo()),MainWindow,SLOT(guardar_correo(QString)));
^ -
Hola
Sin ver el resto del código, viendo la línea en la que heces la conexión, creo que tienes un error de sintaxis, donde pones MainWindow dentro de connect, tienes que usar el puntero this, para que haga referencia a esa misma clase.
Un saludo
-
@Isaac-Mena said in error en connect para mandar el texto en un line edit de mainwindow a otro formulario:
connect(MainWindow,SIGNAL(capturar_correo()),MainWindow,SLOT(guardar_correo(QString)));
por favor aprovecha y usa la nueva sintaxis para signals & slots.
Por otro lado, si lo que quieres es que al abrir el formulario éste pueda mostrar el valor de un QLineEdit de la ventana principal, porqué no simplemente pasas ese valor en el constructor de la clase Formulario2, o agregar un método como Formulario2::setEmail(QString)
No obstante ten en cuenta que en gral. una clase emite una señal cuando quiere enviar/notificar al resto del mundo (ej. otras clases) acerca de un evento (clicked()) o un nuevo valor cambiado (valueChanged(int value)) por lo que nunca estarías emitiendo una señal para recibir algo. Entonces NO debería suceder
emit recibir_correo(QString);