2010-02-11 9 views
0

Je cherche l'implémentation de Qt de la fonction QObject::qt_metacall(_c, _id, _a); c'est où un nom de fonction donné est converti en index. Mais je ne suis pas capable de trouver l'implémentation de la fonction n'importe où dans le code source.Que fait la fonction suivante?

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; 
    } 

Pourquoi est appelé de qt_metacall classe parente?

Répondre

3

Vous devriez pouvoir trouver moc_qobject.cpp quelque part. Il vous oblige à créer Qt car ce fichier est généré automatiquement, tout comme vos propres fichiers moc.

Ici, il est de ma construction (4.6.1 sur 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

Le morceau de code que j'ai posté est de moc_ssObject.cpp –

+0

Doh .. Désolé. J'ai mis à jour ma réponse et posté le code de ma récente version de Qt. – Macke

3

Il appelle la méthode avec l'index _id, de classe _c avec les arguments de la liste _a.

Je crois que l'implémentation est générée par moc, donc ce n'est pas dans une arborescence source.