我有两个同名的信号来自两个不同的classes
A
和B
到class C
。让void SomeSignal()
是来自class A
的信号,没有任何参数。我有另一个来自另一个班级的信号void SomeSignal(int)
。
我需要在class C
中以两种不同的方式处理这些信号。我可以在void SomeSignal()
中制作两个广告位void SomeSignal(int)
和class C
吗?
答案 0 :(得分:7)
是的,它是有效的。但是如果你这样做,你需要处理与使用Qt 5连接语法时的正常方式不同的信号/插槽连接。
请查看以下有关如何处理connecting to overloaded signals and slots
的问题和答案简而言之,请连接为:
connect(a, &A::SomeSignal, this, static_cast<void (C::*)(void)>(&C::SomeSlot));
connect(b, &B::SomeSignal, this, static_cast<void (C::*)(int)>(&C::SomeSlot));
或者,如果您使用的是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);
答案 1 :(得分:1)
是的,你可以,但是如果你正在处理来自完全不同类的不同东西,那么更明确地命名这些插槽(请记住,信号名称和链接的插槽名称之间不需要关系)。