QT信号和插槽无法提供错误消息

QT signal and slot not working giving an error message

本文关键字:错误 消息 信号 插槽 QT      更新时间:2023-10-16

我是QT的新手,并尝试编写信号和插槽。以下是我要运行的代码。使用"连接"功能上的插槽和信号关键字,它可以正常工作。但是我不想在连接函数上使用信号和插槽关键字,而是想使用其他方法。

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

在上面的代码中,未注册的连接函数工作正常,但是注释的连接函数不起作用。我会遇到错误"无匹配函数可以拨打mywindow ::连接"。不知道我在这里犯了什么错误。我正在关注QT的这篇文章。

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

问题是信号-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