在 QT 中,我们可以有两个名称相同但参数不同的插槽吗?
In QT, can we have two slots with same name but different arguments?
我有两个同名的信号来自两个不同的 classes
A
和 B
到 class C
。让 void SomeSignal()
是来自 class A
的信号,没有任何参数。我有另一个信号 void SomeSignal(int)
来自另一个 class。
我需要在 class C
中以两种不同的方式处理这些信号。我可以在 class C
中创建两个插槽 void SomeSignal()
和 void SomeSignal(int)
吗?
是的,你可以,但是如果你处理的是来自完全不同 类 的不同东西,那么以不同的方式命名这些插槽会更清楚(请记住,信号名称和链接的插槽名称之间不需要任何关系) .
是的,它是有效的。但是如果你这样做,你需要以不同于使用 Qt 5 连接语法时的正常方式处理连接到 signals/slots。
看下面的问答如何处理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);
- 似乎必须指定两个模板参数才能连接,因为插槽已过载。
我有两个同名的信号来自两个不同的 classes
A
和 B
到 class C
。让 void SomeSignal()
是来自 class A
的信号,没有任何参数。我有另一个信号 void SomeSignal(int)
来自另一个 class。
我需要在 class C
中以两种不同的方式处理这些信号。我可以在 class C
中创建两个插槽 void SomeSignal()
和 void SomeSignal(int)
吗?
是的,你可以,但是如果你处理的是来自完全不同 类 的不同东西,那么以不同的方式命名这些插槽会更清楚(请记住,信号名称和链接的插槽名称之间不需要任何关系) .
是的,它是有效的。但是如果你这样做,你需要以不同于使用 Qt 5 连接语法时的正常方式处理连接到 signals/slots。
看下面的问答如何处理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);
- 似乎必须指定两个模板参数才能连接,因为插槽已过载。