類(lèi)A中聲明了一signal函數(shù)Test,
class A : public QObject
{
Q_OBJECT
Q_SIGNALS:
void Test(math::point pt);
}
除了參數(shù)pt的簽名使用了namespace外,沒(méi)有特別的地方。
現(xiàn)在在B中增加一個(gè)slot用來(lái)接收A的signal:
class B : public QObject
{
Q_OBJECT
private Q_SLOTS:
void OnTest(math::point pt);
}
現(xiàn)在這樣測(cè)試:
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嗎?
函數(shù)簽名從C++的角度看沒(méi)啥問(wèn)題,因?yàn)閡sing namespace math后,可以找到point類(lèi)型的定義。
有沒(méi)有namespace,對(duì)Qt的moc來(lái)說(shuō),差別可就大了。qt_meta_stringdata中嚴(yán)格按照字符串來(lái)比較函數(shù)“簽名”。定義的時(shí)候帶namespace,而connect的時(shí)候不帶,QMetaObject是不能正確的把信號(hào)傳遞下去的。