Error al conectar señales y slots sobrecargados (overloaded)



  • Que tal, estoy retomando Qt y por falta de practica estoy teniendo problemas conectando señales y slots.

    Tengo un Widget con un QComboBox y un QLCDNumber, el combobox emite una señal cuando el index seleccionado cambia [documentacion], en la misma documentación nos indica que debemos de hacer un static_cast en caso de que estemos usando la sintaxis de puntero a funciones a la hora de conectar la señal (currentIndexChanged) con un slot, como sigue:

    connect(comboBox, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
        [=](int index){ /* ... */ });
    

    Esta señal la quiero conectar al QLCDNumber, este tiene el slot (display) [documentación]:

    Según [este] link una de las ventajas de usar la sintaxis de puntero a funciones a la hora de conectar señales y slots es que el compilador puede revisar que los argumentos de la señal y del slot sean los mismos, en este caso ambos son int así que los intento conectar la señal y slot como sigue:

    QObject::connect(ui->comboBox,
                        static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
                        ui->lcdNumber,
                        &QLCDNumber::display);
    

    Y obtengo el siguiente error:

    .../QtProyects/dropDown_map/mainwindow.cpp:30: error: no matching function for call to ‘MainWindow::connect(QComboBox*&, void (QComboBox::*)(int), QLCDNumber*&, <unresolved overloaded function type>)’
                         &QLCDNumber::display);
                                             ^
    

    ¿Alguna sugerencia? Según interpreto el error es como si &QLCDNumber::display no estuviera declarada(?)

    Saludos



  • @Carlos-Diaz

    No hablo español, pero

    //QLCDNumber::display is overloaded too ->
    QObject::connect(ui->comboBox,
                        static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
                        ui->lcdNumber,
                        static_cast<void(QLCDNumber::*)(int)>(&QLCDNumber::display);
    

    or

    QObject::connect(u->comboBox, 
                     SIGNAL(currentIndexChanged(int)), 
                     ui->lcdNumber,
                     SLOT(display(int)));              
    

    :-)



  • Hola @J-Hilk , si ese era el problema, ahora compila y funciona como debería :), todavía me resta entender el static_cast.

    Saludos :)


Log in to reply
 

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