我们可以利用某个槽在 qt_static_metacall 函数的索引位置来调用这个槽: void Counter::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Counter *_t =static_cast<Counter *>(_o); switch (_id) { case 0: _t...
virtual void *qt_metacast(const char *); \ QT_TR_FUNCTIONS \ virtual int qt_metacall(QMetaObject::Call, int, void **); \ private: \ Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \ struct QPrivateSignal {}; 1. 2. ...
return QObject::qt_metacast(_clname); } int XTest::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) { if (_id < 5) qt_static_metacall(this, ...
利用槽函数在qt_static_metacall 函数的索引位置来调用槽函数: void Object::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); Object *_t = static_cast<Object *>(_o); sw...
0, qt_static_metacall }; QMetaObjectExtraData类型的内部成员static_metacall是一个指向Object::qt_static_metacall 的函数指针。 Object的内存布局如下: Object内存布局已经包含了静态成员staticMetaObject和 staticMetaObjectExtraData成员。 const QMetaObject *Object::metaObject() const ...
typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call, int, void **); StaticMetacallFunction static_metacall; // 一个函数指针,信号槽机制会用到 const QMetaObject * const *relatedMetaObjects; // ...还不清楚这个有什么用
-intxxx::qt_metacall(QMetaObject::Call _c,int_id,void**_a) 为了更好的理解这5个函数,我们首先需要引入一个Qt元对象,也就是QMetaObject,这个类里边存储了父类的源对象、我们当前类描述、函数描述和qt_static_metacall函数地址。 a、qt_static_metacall ...
virtual int qt_metacall(QMetaObject::Call, int, void **); \ QT_TR_FUNCTIONS \ private: \ Q_OBJECT_NO_ATTRIBUTES_WARNING \ Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \ QT_WARNING_POP \ struct QPrivateSignal {}; \ ...
这里会用的元对象的另一个成员static_metacall,它又是啥呢,答案还在moc文件里 image.png 这个最终会在触发信号的时候调用到这个函数,最终调用到我们的槽函数,如果不记得这东西怎么传进去的往前翻一番。 至此信号差就链接起来了,最终会以Connection对象的方式存放在每个QObject对象的connectionlist里面,这种是Qt4老的链...
//槽函数偏移 主要是区别于多个信号c->connectionType=type;//连接类型c->isSlotObject=false;//是否是槽对象 默认是truec->argumentTypes.store(types);//参数类型c->nextConnectionList=0;//指向下个连接对象c->callFunction=callFunction;//静态回调函数,也就是qt_static_metacallQObjectPrivate::get(s)->...