我已经使用SIGNAL()
宏从SomeClass::somSignal
有一个工作连接,但我没有办法使用&SomeClass::someSignal
将其连接到lambda,主要是因为someClass
无法访问。不过,我有QObject *
。
我试着查看QMetaObject
;它应该有某种查找结构来保存这些细节。
我们可以有:
QMetaMethod::fromSignal(PointerToMemberFunction)
返回QMetaMethod
我的问题是,有可能有这样的东西吗?
fromMetaMethod(QMetaMethod)
返回PointerToMemberFunction? ?
谢谢。
创建您想要的连接的一种方法不需要找到任何方法地址。
简单:
- 创建一个信号到信号的连接,从
SomeClass::someSignal
到你自己的信号在你自己的类使用SIGNAL()
连接风格。 - 将你的信号连接到lambda。
你只需要确保原始信号的参数被转发到你的lambda。
的例子:
QObject::connect(
pointerToSomeClass, SIGNAL(someSignal(int)),
pointerToMyClass , SIGNAL(mySignal(int)),
Qt::DirectConnection
);
QObject::connect(
pointerToMyClass, &MyClass::mySignal,
[](int i) { ... }
);
如果你碰巧需要原始信号的发送者,那么你将需要一个插槽。
的例子:
void myClass::mySlot(int i)
{
emit mySignal(sender(), i);
}
和
QObject::connect(
pointerToSomeClass, SIGNAL(someSignal(int)),
pointerToMyClass , SIGNAL(mySlot(int)),
Qt::DirectConnection
);
QObject::connect(
pointerToMyClass, &MyClass::mySignal,
[](QObject* sender, int i) { ... }
);