Сигнал QT и слот не работают с сообщением об ошибке

Я новичок в Qt и пытаюсь записать сигнал и слот. Ниже приведен код, который я пытался запустить. с ключевыми словами SLOT и SIGNAL в функции "connect" все работает нормально. Но я не хочу использовать ключевые слова SIGNAL и SLOT для функции соединения, вместо этого хочу использовать другой подход.

  class MyWindow:public QMainWindow
  {
      Q_OBJECT
  public:
      MyWindow();
  };

  MyWindow::MyWindow()
  {
     QWidget *widget=new QWidget;
     QHBoxLayout *layout =new QHBoxLayout;
     QSpinBox *mySlide = new QSpinBox;
     mySlide->setRange(0,10);
     QLCDNumber *lcdNumber= new QLCDNumber;
     layout->addWidget(mySlide);
     layout->addWidget(lcdNumber);

       connect(mySlide,SIGNAL(valueChanged(int)),lcdNumber,SLOT(display(int)));
    // connect(mySlide, &QSpinBox::valueChanged,lcdNumber, &QLCDNumber::display);

      widget->setLayout(layout);
      setCentralWidget(widget);
   }

В приведенном выше коде функция uncommented connect работает нормально, но функция подключения с комментариями не работает. Я получаю сообщение об ошибке "Нет подходящей функции для вызова MyWindow::connect". Не уверен, какую ошибку я совершил здесь. Я следил за этой статьей из Qt.

http://doc.qt.io/qt-5/qtopengl-hellogl2-window-cpp.html

1 ответ

Проблема в том, что оба сигнала - QSpinBox::valueChanged - и слот - QLCDNumber::display - иметь несколько перегрузок для разных типов аргументов. У вас есть несколько вариантов.

1) Используйте static_cast чтобы устранить неоднозначность между различными сигналами и перегрузками слотов...

connect(mySlide,
        static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
        lcdNumber,
        static_cast<void(QLCDNumber::*)(int)>(&QLCDNumber::display));

или же...

2) Просто используйте lambda...

connect(mySlide, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
        [lcdNumber](int value)
        {
          lcdNumber->display(value);
        });

Хотя используя lambda still требует static_cast по сигналу.

Другие вопросы по тегам