類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是不能正確的把信號傳遞下去的。