Qt信号槽函数用lambada表达式作为槽函数的陷阱

lambada表达式作为槽函数可能出错的地方是,如果不是通过参数绑定的变量,而是通过[&]来捕获的变量,当信号调用时绑定可能不是connect时候的那个变量了,它会被修改!!但是如果是[=]或者(args)形式传入的变量就不会有问题

for(size_t i = 0;i<=1;++i)
  {
      Newspaper* that = nullptr;
      if(i == 0)
          that = &newspaper1;
      else
         that =  &newspaper2;
      QObject::connect(that, &Newspaper::newPaper,that,[=/*&*/](const QString name){qDebug()<<i;//name;});

      //newspaper.send();//发送信号
  }
  newspaper1.newPaper("FFFFFFFFFFFFFFF");
  newspaper2.newPaper("ffffffffffffffffffffff");

向上面的代码,输出i就会输出两次2.所以引用绑定的时候一定要小心

你可能感兴趣的:(Qt信号槽函数用lambada表达式作为槽函数的陷阱)