在 Qt 5 中,QObject::connect()
有五个重载:
1 | QMetaObject::Connection connect(const QObject *, const char *, |
由于做界面窗口最大化按钮时,第一次点击最大化窗口,第二次还原为原大小窗口,因此需要自己写一个函数。而为了避免代码冗余,于是在connect传参时使用了lambda表达式,代码如下:
1 | connect(ui->btn_group, &ButtonGroup::maxWindow, [=]() |
于是编译错误,提示
1 | no matching function for call to (类名)::connect()…… |
看到这个错误,首先想到的是参数问题,由于connect()参数为四个,虽然lambda表达式默认可以省略this参数,但还是添加上试试
1 | connect(ui->btn_group, &ButtonGroup::maxWindow, this, [=](){}); |
结果还是编译错误。后来上网查阅相关错误,结果大多数人的错误基本都是传参问题,但基本没有用lambda表达式的。于是删掉lambda表达式改用函数调用,结果编译通过。因此错误锁定在lambda表达式上。
后来发现,lambda表达式是C++11范畴,于是在pro文件当中添加以下代码:
1 | CONFIG += c++11 |
编译通过。
因此Qt使用lambda表达式时,首先使用的编译器要支持要用的C++11 特性,其次,在.pro中加上 CONFIG += c++11