Connectar Custom Widget con MainWindow
-
Hola,
Estoy a vueltas con una aplicación , en ella tengo varios widget personalizados que se muestran en el CentralWidget de la MainWindow. El caso es que el widget hace un chequeo y según el valor que de, quiero que cambie el StatusBar de la MainWindow. Creo que que el camino es hacerlo con SIGNAL y SLOT. Pero no lo consigo... Estos son los pasos que he seguido:inicio.h
public slots: void changeconexionstatus(const bool &statuscon);
inicio.cpp
void inicio::terminal(){ prueba *open = new prueba(this); connect(open,&prueba::statusconexion,this,&inicio::changeconexionstatus); this->setCentralWidget(open); } void inicio::changeconexionstatus (const bool &statuscon){ if (statuscon){ statusconico->setPixmap(QPixmap(":/img/img/connect.png")); } }
prueba.h
signals: void statusconexion(const bool &value);
prueba.cpp
connect(ui->pushButton,&QPushButton::clicked,this,check_connection); void tpv::check_connection(){ emit statusconexion(true); }
Con este código si hago click en el botón, funciona, pero lo que quiero es no tener que hacer click en ningún botón, sino que funcione simplemente cuando llamo a la función y esto es lo que no consigo.
Gracias y un saludo
-
Hola
Tu ahí estás conectando el click del botón con la señal, y claro, se dispara cuando se pulsa el botón, tendrías que emitir la señal cuando el objeto que hace las comprobaciones termine de hacerlas.
Un saludo
-
Ok, eso lo entiendo, pero ahí es donde me atasco. La función que hace las comprobaciones es check_connection, pero si la invoco directamente no funciona, no envía la señal. Aquí he puesto muy resumida la función, pero hará ciertas comprobaciones y según el resultado emitirá un valor u otro.
-
Vale, creo que se lo que pasa pero ahora mismo no se como solucionarlo... el problema creo que es en la linea de ejecución...
Cuando en la Main Window declaro el custom widget
prueba *open = new prueba(this);
este se carga por completo y ejecuta la funcionvoid tpv::check_connection()
emitiendo la señal, pero como la conexión en la mainwindowconnect(open,&prueba::statusconexion,this,&inicio::changeconexionstatus);
aun no se ha cargado no ocurre nada.
Al hacer lo mismo con un un pushbutton el main y el custom widget ya están totalmente cargados por lo que si funciona.Un saludo
Raul -
Ok, ya me dieron solucion...
Simplemente hay que ejecutar la funcion
check_connection
desde la mainwindow en vez desde el customwidget....tpv *open = new tpv(this); connect(open,&prueba::statusconexion,this,&inicio::changeconexionstatus); open->check_connection();
Por si le sirve a alguien...