为什么第一句需要类型转换,第二句不需要?
connect(spinbox,static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),slider,&QSlider::setValue);
connect(slider,&QSlider::valueChanged,spinbox,&QSpinBox::setValue);
为什么第一句需要类型转换,第二句不需要?
connect(spinbox,static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),slider,&QSlider::setValue);
connect(slider,&QSlider::valueChanged,spinbox,&QSpinBox::setValue);
因为QSpinBox的valueChanged有重载,就是同样名称的成员函数有不同的参数,所以需要告诉编译器是哪个。
虽然在QSpinBox的文档里乍一看好像没有两个valueChanged,实际在Obsolete members里还有一个,所以在代码里还是存在的。
不过你这个写法不是Qt官方推荐的处理重载信号的办法,根据文档推荐的是这种写法:
connect(spinBox, QOverload<int>::of(&QSpinBox::valueChanged), ...);