力为的技术博客

联系 聚合 管理
  154 Posts :: 1 Stories :: 561 Comments :: 0 Trackbacks
类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是不能正确的把信号传递下去的。


posted on 2013-07-30 15:07 力为 阅读(4165) 评论(0)  编辑 收藏 引用 所属分类: 3. VC&MFC&Qt

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理