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


  • Moderators

    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 funcion void tpv::check_connection() emitiendo la señal, pero como la conexión en la mainwindow connect(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...


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.