Qt 下面的函数做什么?
我正在寻找Qt的函数Qt 下面的函数做什么?,qt,implementation,signals-slots,Qt,Implementation,Signals Slots,我正在寻找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 ==
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;
}
int-ssObject::qt\u元调用(QMetaObject::Call\u c,int\u id,void**a)
{
_id=QObject::qt_元调用(_c,_id,_a);
如果(_id<0)
返回_id;
if(_c==QMetaObject::InvokeMetMethod){
开关(_id){
案例0:readyToPrint();中断;
案例1:readyToPrint1(*重新解释投射([1]));中断;
//''''
}
返回_id;
}
为什么调用父类的qt\u metacall
?它调用具有索引id的类c的方法,该类的参数在列表a中
我相信实现是由moc生成的,因此它不在任何源树中。它调用带有索引id的方法,该方法属于类c,参数在列表a中
我相信实现是由moc生成的,因此它不在任何源代码树中。您应该能够在某处找到moc_qobject.cpp。它要求您构建Qt,因为此文件是自动生成的,就像您自己的moc文件一样
这是我的版本(windows上的4.6.1):
int-QObject::qt\u元调用(QMetaObject::Call\u c,int\u id,void**a)
{
如果(_id<0)
返回_id;
if(_c==QMetaObject::InvokeMetMethod){
开关(_id){
案例0:销毁(*重新解释铸造([1]));断裂;
案例1:破坏();断裂;
案例2:deleteLater();break;
案例3:d_func()->_q_重新注册计时器((*重新解释_cast(_a[1]));中断;
违约:;
}
_id-=4;
}
#ifndef QT_无属性
else if(_c==QMetaObject::ReadProperty){
void*_v=_a[0];
开关(_id){
案例0:*重新解释cast(\u v)=objectName();中断;
}
_id-=1;
}else if(_c==QMetaObject::WriteProperty){
void*_v=_a[0];
开关(_id){
案例0:setObjectName(*reinterpret_cast(_v));中断;
}
_id-=1;
}else if(_c==QMetaObject::ResetProperty){
_id-=1;
}else if(_c==QMetaObject::QueryPropertyDesignable){
_id-=1;
}else if(_c==QMetaObject::QueryPropertyScript可写){
_id-=1;
}else if(_c==QMetaObject::QueryPropertyStored){
_id-=1;
}else if(_c==QMetaObject::QueryPropertyEdit){
_id-=1;
}else if(_c==QMetaObject::QueryPropertyUser){
_id-=1;
}
#endif//QT\u NO\u属性
返回_id;
}
您应该能够在某处找到moc_qobject.cpp。它要求您构建Qt,因为此文件是自动生成的,就像您自己的moc文件一样
这是我的版本(windows上的4.6.1):
int-QObject::qt\u元调用(QMetaObject::Call\u c,int\u id,void**a)
{
如果(_id<0)
返回_id;
if(_c==QMetaObject::InvokeMetMethod){
开关(_id){
案例0:销毁(*重新解释铸造([1]));断裂;
案例1:破坏();断裂;
案例2:deleteLater();break;
案例3:d_func()->_q_重新注册计时器((*重新解释_cast(_a[1]));中断;
违约:;
}
_id-=4;
}
#ifndef QT_无属性
else if(_c==QMetaObject::ReadProperty){
void*_v=_a[0];
开关(_id){
案例0:*重新解释cast(\u v)=objectName();中断;
}
_id-=1;
}else if(_c==QMetaObject::WriteProperty){
void*_v=_a[0];
开关(_id){
案例0:setObjectName(*reinterpret_cast(_v));中断;
}
_id-=1;
}else if(_c==QMetaObject::ResetProperty){
_id-=1;
}else if(_c==QMetaObject::QueryPropertyDesignable){
_id-=1;
}else if(_c==QMetaObject::QueryPropertyScript可写){
_id-=1;
}else if(_c==QMetaObject::QueryPropertyStored){
_id-=1;
}else if(_c==QMetaObject::QueryPropertyEdit){
_id-=1;
}else if(_c==QMetaObject::QueryPropertyUser){
_id-=1;
}
#endif//QT\u NO\u属性
返回_id;
}
我发布的代码来自moc_ssObject.cppDoh..抱歉。我更新了答案并发布了我最近的Qt版本中的代码。我发布的代码来自moc_ssObject.cppDoh..抱歉。我更新了答案并发布了我最近的Qt版本中的代码。
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;
}