我有一些看起来像这样的代码:
class MyClass : public QObject
{
Q_OBJECT
signals:
void SetValue(float value);
public slots:
void OnSetValue(float value, bool fromDatabase = false);
}
connect(this, SIGNAL(SetValue(float)), this, SLOT(OnSetValue(float)));
这工作正常,但我想利用Qt5's new signal/slot syntax(并删除宏) . 如果我将connect()更改为:
connect(this, &MyClass::SetValue, this, &MyClass::OnSetValue);
我得到(在Visual Studio 2013中):
错误C2338:插槽需要的参数多于信号提供的参数
我可以创建一个调用OnSetValue()的中间函数,并允许设置默认参数,但这似乎浪费了代码 . 有什么更好的解决方法?
1 回答
sim642提供的link也声明了新的连接语法"can be used with c+11 lambda expressions" . 对于上面的例子,我能够使用:
这比稍微复杂但是代码少于添加中间函数,并且仍然提供编译时检查 .
Igor Tandetnik上面提供了更好的版本:
这用[this]替换[=](使lambda能够通过值捕获范围内的所有自动变量),减少lambda的范围和出错的可能性 .