Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT信号和插槽不工作,发出错误消息_C++_Qt_Qt Signals_Qt Slot - Fatal编程技术网

C++ QT信号和插槽不工作,发出错误消息

C++ QT信号和插槽不工作,发出错误消息,c++,qt,qt-signals,qt-slot,C++,Qt,Qt Signals,Qt Slot,我对Qt是新手,正在尝试编写信号和插槽。下面是我试图运行的代码。通过“连接”功能上的插槽和信号关键字,它工作正常。但我不想在connect函数上使用SIGNAL和SLOT关键字,而是想使用不同的方法 class MyWindow:public QMainWindow { Q_OBJECT public: MyWindow(); }; MyWindow::MyWindow() { QWidget *widget=new QWidget;

我对Qt是新手,正在尝试编写信号和插槽。下面是我试图运行的代码。通过“连接”功能上的插槽和信号关键字,它工作正常。但我不想在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);
   }
在上面的代码中,未注释的connect函数工作正常,但注释的connect函数不工作。我收到错误“没有匹配的函数来调用MyWindow::connect”。不知道我在这里犯了什么错误。我一直在关注qt上的这篇文章


问题在于信号---和插槽---对于不同的参数类型都有多个重载。你有几个选择

1) 使用
static\u cast
消除各种信号和插槽过载之间的歧义

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

尽管使用
lambda仍然
需要对信号进行
static\u cast

非常感谢。它确实奏效了。但我只是想知道为什么connect(mySlide、SIGNAL(valueChanged(int))、lcdNumber和QLCDNumber::display)不起作用。第一部分是明确的信号。您不能混合和匹配各种信号/插槽语法。它要么是全部信号和插槽语法,要么是指向成员的新指针语法。
connect(mySlide, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
        [lcdNumber](int value)
        {
          lcdNumber->display(value);
        });