09/28
2015
最近无聊写Qt程序玩,发现connect的clicked信号不能传递自定义类型的参数,虽然有其他不传参数的方案可以解决问题,但是绕圈子感觉不爽,于是乎折腾好久才解决问题。
简单来说用到了qt5的新特性和c++11
的lambda
匿名函数
Qt5的connect
槽支持普通函数,而不是原来的只支持QObject,只能在slots
定义
The new syntax can even connect to functions, not just QObjects:
connect(sender, &Sender::valueChanged, someFunction);
上面的someFunction
可以直接用lambda表达式代替,这样就可以通过lambda取上下文变量,变相传递自己想传的类型参数,实例如下:
CustomClass cc; //假设CustomClass是已经定义好了的类
//在需要的地方使用connect连接
connect(sender, &sender::clicked, receiver, [cc]{
showEditDialog(cc);
});
以上代码使用值传递方式将CustomClass
类型的参数传递给showEditDialog函数,达到目的。
lambda表达式更多的用法:Lambda Expressions in C++