类A中声明了一signal函数Test,
class A : public QObject
{
Q_OBJECT
Q_SIGNALS:
void Test(math::point pt);
}
除了参数pt的签名使用了namespace外,没有特别的地方。
现在在B中增加一个slot用来接收A的signal:
class B : public QObject
{
Q_OBJECT
private Q_SLOTS:
void OnTest(math::point pt);
}
现在这样测试:
void mytest(math::point pt)
{
using namespace math;
A a;
B b;
QObject::connect(&a, SIGNAL(Test(point)), &b, SLOT(OnTest(point));
a.Test(pt);
}
b能收到a的signal吗?
函数签名从C++的角度看没啥问题,因为using namespace math后,可以找到point类型的定义。
有没有namespace,对Qt的moc来说,差别可就大了。qt_meta_stringdata中严格按照字符串来比较函数“签名”。定义的时候带namespace,而connect的时候不带,QMetaObject是不能正确的把信号传递下去的。