Q_SLOTS/Q_SIGNALS与namespace

来源:互联网 发布:强制视频软件多少钱 编辑:程序博客网 时间:2024/05/21 17:17
类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是不能正确的把信号传递下去的。

0 0
原创粉丝点击