sky*_*ash 4 c++ qt signals-slots
我有两个信号具有相同名称的两个不同的未来classes A和B成class C.让我们void SomeSignal()来自class A没有任何争论的信号.我有另一个void SomeSignal(int)来自另一个班级的信号.
我需要以两种不同的方式处理这些信号class C.我可以让两个插槽void SomeSignal()和void SomeSignal(int)在class C?
是的,它是有效的.但是,如果这样做,在使用Qt 5连接语法时,需要以与正常方式不同的方式处理信号/插槽的连接.
请查看以下有关如何处理连接到过载信号和插槽的问题和答案
简而言之,连接为:
connect(a, &A::SomeSignal, this, static_cast<void (C::*)(void)>(&C::SomeSlot));
connect(b, &B::SomeSignal, this, static_cast<void (C::*)(int)>(&C::SomeSlot));
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是Qt 5.7,请使用qOverload辅助函数.
编辑:使用显式模板参数@TobySpeight指出如下:
QObject::connect<void(A::*)(), void(C::*)()>(&a, &A::SomeSignal, &c, &C::SomeSlot);
QObject::connect<void(B::*)(int), void(C::*)(int)>(&b, &B::SomeSignal, &c, &C::SomeSlot);
Run Code Online (Sandbox Code Playgroud)