Visual studio 如何在具有默认参数的插槽上使用Qt5 connect()

Visual studio 如何在具有默认参数的插槽上使用Qt5 connect(),visual-studio,c++11,qt5,signals-slots,Visual Studio,C++11,Qt5,Signals Slots,我有一些代码如下所示: 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)));

我有一些代码如下所示:

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)));
这很好,但我想利用(并删除宏)。如果我将connect()更改为:

我得到(在Visual Studio 2013中):

错误C2338:插槽需要的参数多于信号提供的参数

我可以创建一个中介函数来调用OnSetValue(),并允许设置默认参数,但这似乎是在浪费代码。解决这个问题的更好方法是什么?

提供的还声明了新的连接语法“可以与c+11 lambda表达式一起使用”。对于上述示例,我可以使用:

connect(this, &MyClass::SetValue, [=](float value) { OnSetValue(value); });
这比添加中间函数稍微复杂一些,但代码更少,并且仍然提供编译时检查

提供了上述更好的版本:

connect(this, &MyClass::SetValue, [this](float value){ OnSetValue(value); });

这将[=](使lambda能够按值捕获作用域中的所有自动变量)替换为[This],从而减少lambda的作用域和出错的可能性。

根据Qt-wiki,使用成员函数指针是不可能的:.
connect(This,&MyClass::SetValue,[This](浮点值){OnSetValue(value);})
connect(this, &MyClass::SetValue, [this](float value){ OnSetValue(value); });