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. ...
if (!strcmp(_clname, qt_meta_stringdata_XTest.stringdata0)) return static_cast<void*>(this); 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...
//在元对象的元数据字符串中找到回调的函数指针qt_static_metacall QObjectPrivate::StaticMetaCallFunction callFunction = (rmeta && QMetaObjectPrivate::get(rmeta)->revision >= 6 && rmeta->d.extradata) ? reinterpret_cast<const QMetaObjectExtraData *>(rmeta->d.extradata)->static_metacall : 0;...
//在元对象的元数据字符串中找到回调的函数指针qt_static_metacall QObjectPrivate::StaticMetaCallFunction callFunction = (rmeta && QMetaObjectPrivate::get(rmeta)->revision >= 6 && rmeta->d.extradata) ? reinterpret_cast<constQMetaObjectExtraData*>(rmeta->d.extradata)->static_metacall : 0; Q...
QMetaObject::static_metacall 调用类moc文件中的类名::qt_metacall函数。例如XTest::qt_metacall QMetaObject::newInstance 仅支持通过Q_INVOKABLE声明的构造函数 构造该类的新实例。你最多可以传递十个参数赋给构造函数,返回新对象。 如果没有合适的构造函数可用,返回nullptr。
-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 {}; \ ...
typedef void (*StaticMetacallFunction)(QObject *, QMetaObject::Call, int, void **); StaticMetacallFunction static_metacall; // 一个函数指针,信号槽机制会用到 const QMetaObject * const *relatedMetaObjects; // ...还不清楚这个有什么用
这里会用的元对象的另一个成员static_metacall,它又是啥呢,答案还在moc文件里 image.png 这个最终会在触发信号的时候调用到这个函数,最终调用到我们的槽函数,如果不记得这东西怎么传进去的往前翻一番。 至此信号差就链接起来了,最终会以Connection对象的方式存放在每个QObject对象的connectionlist里面,这种是Qt4老的链...
a、qt_static_metacall 很重要,根据函数索引进行调用槽函数,这块需要注意一个很大的细节问题,这个回调中,信号和槽都是可以被回调的,自动生成代码如下 if(_c==QMetaObject::InvokeMetaMethod){completerTst*_t=static_cast<completerTst*>(_o);Q_UNUSED(_t)switch(_id){case0:_t->lanuch();break;case1:...