6. Qt 信号与信号槽(8)实例分析
生活随笔
收集整理的這篇文章主要介紹了
6. Qt 信号与信号槽(8)实例分析
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Jerry.h 和Tom.h 是我寫的,moc_Jerry.cpp是moc生成的。
moc生成文件的規(guī)則可參考此文:Qt 原理-MOC(2) QObject.h(點(diǎn)擊查看)
Jerry.h
class Jerry : public QObject {Q_OBJECT public:Jerry(QObject *parent = nullptr) : QObject(parent){} public slots:void runAway(){qDebug() << u8"那只貓又來(lái)了,快溜!" ;} };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 = {//包含類名、信號(hào)函數(shù)名稱等{ 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_LITERALstatic const uint qt_meta_data_Jerry[] = {//格式是固定的// content:8, // revision0, // classname0, 0, // classinfo1, 14, // methods0, 0, // properties0, 0, // enums/sets0, 0, // constructors0, // flags0, // signalCount// slots: name, argc, parameters, tag, flags1, 0, 19, 2, 0x0a /* Public */,// slots: parametersQMetaType::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總結(jié)
以上是生活随笔為你收集整理的6. Qt 信号与信号槽(8)实例分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Qt 原理-MOC(2) QObject
- 下一篇: 6. Qt 信号与信号槽(9)总结分析