Reverse QMetaMethod::fromSignal()



我已经使用SIGNAL()宏从SomeClass::somSignal有一个工作连接,但我没有办法使用&SomeClass::someSignal将其连接到lambda,主要是因为someClass无法访问。不过,我有QObject *
我试着查看QMetaObject;它应该有某种查找结构来保存这些细节。

我们可以有:

QMetaMethod::fromSignal(PointerToMemberFunction)

返回QMetaMethod

我的问题是,有可能有这样的东西吗?

fromMetaMethod(QMetaMethod)

返回PointerToMemberFunction? ?

谢谢。

创建您想要的连接的一种方法不需要找到任何方法地址。
简单:

  1. 创建一个信号到信号的连接,从SomeClass::someSignal到你自己的信号在你自己的类使用SIGNAL()连接风格。
  2. 将你的信号连接到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) { ... }
);

最新更新