Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

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

    Spanish
    qt5.8
    2
    3
    1067
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Carlos Diaz
      Carlos Diaz last edited by Carlos Diaz

      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

      J.Hilk 1 Reply Last reply Reply Quote 0
      • J.Hilk
        J.Hilk Moderators @Carlos Diaz last edited by

        @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)));              
        

        :-)

        Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct

        Qt Needs YOUR vote: https://bugreports.qt.io/browse/QTQAINFRA-4121


        Q: What's that?
        A: It's blue light.
        Q: What does it do?
        A: It turns blue.

        1 Reply Last reply Reply Quote 2
        • Carlos Diaz
          Carlos Diaz last edited by

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

          Saludos :)

          1 Reply Last reply Reply Quote 0
          • First post
            Last post