2010-02-11 34 views
0

我正在尋找Qt的函數QObject::qt_metacall(_c, _id, _a);的實現,這是給定函數名稱轉換爲索引的地方。但是我無法在其源代碼中的任何位置找到函數實現。以下功能有什麼作用?

int ssObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 
{ 
    _id = QObject::qt_metacall(_c, _id, _a); 
    if (_id < 0) 
     return _id; 
    if (_c == QMetaObject::InvokeMetaMethod) { 
     switch (_id) { 
     case 0: readyToPrint(); break; 
     case 1: readyToPrint1((*reinterpret_cast< int(*)>(_a[1]))); break; 
       //'''' 

     } 
    return _id; 
    } 

爲什麼父類的qt_metacall叫?

回答

3

你應該能夠在某處找到moc_qobject.cpp。它需要你創建Qt,因爲這個文件是自動生成的,就像你自己的moc文件一樣。

這是從我的版本(4.6.1在Windows上):

int QObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 
{ 
    if (_id < 0) 
     return _id; 
    if (_c == QMetaObject::InvokeMetaMethod) { 
     switch (_id) { 
     case 0: destroyed((*reinterpret_cast< QObject*(*)>(_a[1]))); break; 
     case 1: destroyed(); break; 
     case 2: deleteLater(); break; 
     case 3: d_func()->_q_reregisterTimers((*reinterpret_cast< void*(*)>(_a[1]))); break; 
     default: ; 
     } 
     _id -= 4; 
    } 
#ifndef QT_NO_PROPERTIES 
     else if (_c == QMetaObject::ReadProperty) { 
     void *_v = _a[0]; 
     switch (_id) { 
     case 0: *reinterpret_cast< QString*>(_v) = objectName(); break; 
     } 
     _id -= 1; 
    } else if (_c == QMetaObject::WriteProperty) { 
     void *_v = _a[0]; 
     switch (_id) { 
     case 0: setObjectName(*reinterpret_cast< QString*>(_v)); break; 
     } 
     _id -= 1; 
    } else if (_c == QMetaObject::ResetProperty) { 
     _id -= 1; 
    } else if (_c == QMetaObject::QueryPropertyDesignable) { 
     _id -= 1; 
    } else if (_c == QMetaObject::QueryPropertyScriptable) { 
     _id -= 1; 
    } else if (_c == QMetaObject::QueryPropertyStored) { 
     _id -= 1; 
    } else if (_c == QMetaObject::QueryPropertyEditable) { 
     _id -= 1; 
    } else if (_c == QMetaObject::QueryPropertyUser) { 
     _id -= 1; 
    } 
#endif // QT_NO_PROPERTIES 
    return _id; 
} 
+0

的一塊,我已經發布了從moc_ssObject.cpp – 2010-02-11 12:40:23

+0

衛生署代碼..對不起。我更新了我的答案,併發布了我最近Qt版本的代碼。 – Macke 2010-02-11 15:09:43

3

它使用列表_a中的參數調用具有類_c的索引_id的方法。

我相信該實現是由moc生成的,所以它不在任何源代碼樹中。