Jerry.h 和Tom.h 是我写的,moc_Jerry.cpp是moc生成的。
moc生成文件的规则可参考此文:Qt 原理-MOC(2) QObject.h(点击查看)
Jerry.h
class Jerry : public QObject
{
Q_OBJECT
public:
Jerry(QObject *parent = nullptr) : QObject(parent)
{
}
public slots:
void runAway()
{
qDebug() << u8"那只猫又来了,快溜!" ;
}
};
Tom.h
class Tom : public QObject
{
Q_OBJECT
public:
Tom(QObject *parent = nullptr) : QObject(parent)
{
}
void miaow()
{
qDebug() << u8"喵!" ;
emit miao();
}
signals:
void miao();
};
moc_Jerry.cpp
struct qt_meta_stringdata_Jerry_t {
QByteArrayData data[3];
char stringdata0[15];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_Jerry_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_Jerry_t qt_meta_stringdata_Jerry = {//包含类名、信号函数名称等
{
QT_MOC_LITERAL(0, 0, 5), // "Jerry"
QT_MOC_LITERAL(1, 6, 7), // "runAway"
QT_MOC_LITERAL(2, 14, 0) // ""
},
"Jerry\0runAway\0"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_Jerry[] = {//格式是固定的
// content:
8, // revision
0, // classname
0, 0, // classinfo
1, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
// slots: name, argc, parameters, tag, flags
1, 0, 19, 2, 0x0a /* Public */,
// slots: parameters
QMetaType::Void,
0 // eod
};
void Jerry::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<Jerry *>(_o);
Q_UNUSED(_t)
switch (_id) {
case 0: _t->runAway(); break;
default: ;
}
}
Q_UNUSED(_a);
}
QT_INIT_METAOBJECT const QMetaObject Jerry::staticMetaObject = { {
&QObject::staticMetaObject,
qt_meta_stringdata_Jerry.data,
qt_meta_data_Jerry,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *Jerry::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *Jerry::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_Jerry.stringdata0))
return static_cast<void*>(this);
return QObject::qt_metacast(_clname);
}
int Jerry::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 < 1)
qt_static_metacall(this, _c, _id, _a);
_id -= 1;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 1)
*reinterpret_cast<int*>(_a[0]) = -1;
_id -= 1;
}
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE