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

How can I use Qt5 connect() on a slot with default parameters

我有一些代码看起来像这样:

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 年):

error C2338: The slot requires more arguments than the signal provides

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

提供的 link that sim642 还声明了新的连接语法 "can be used with c+11 lambda expressions"。对于上面的示例,我能够使用:

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

这比添加中间函数稍微复杂一些,但代码更少,并且仍然提供编译时检查。

Igor Tandetnik 上面提供了一个更好的版本:

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

这将 [=](使 lambda 能够按值捕获范围内的所有自动变量)替换为 [this],减少了 lambda 的范围和出错的可能性。