Qt:Signal调用的函数的默认参数

时间:2016-11-14 21:24:05

标签: c++ qt signals-slots qwidget default-parameters

当我尝试将一个默认参数和一个非默认参数的函数连接到QSlider时,我收到此错误:

Set items=new HashSet();

这是否意味着连接到某个功能的QWidget不支持默认参数?有办法解决这个问题吗?

以下是我的尝试:

230: error: static assertion failed: The slot requires more arguments than the signal provides.
         Q_STATIC_ASSERT_X(int(SignalType::ArgumentCount) >= int(SlotType::ArgumentCount),
         ^

1 个答案:

答案 0 :(得分:3)

  

这是否意味着连接到函数的QWidget不支持默认参数?

来自信号和广告位的documentation

  

信号的签名必须与接收槽的签名匹配。

因此我会说不,这是不可能的。

  

有没有办法解决这个问题?

例如,如果编译器支持C ++ 11,则可以使用lambda函数 像这样:

connect(sliderA, &QSlider::valueChanged, [this](int pos){ someSliderChanged(pos); });

否则,定义一个(我说)前向插槽,它没有额外的参数,并将其绑定到信号上。

有关QtObject::connect的重载,请参阅documentation了解更多详情。