QObject在QT中是所有类的基类,经过MOC处理后代码如下

之所以贴出这段代码,是因为很多流程追踪到最后一些关键性函数都是出自这个类

源码 4.8.6 MOC版本 63

  1 /****************************************************************************
2 ** Meta object code from reading C++ file 'qobject.h'
3 **
4 ** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6)
5 **
6 ** WARNING! All changes made in this file will be lost!
7 *****************************************************************************/
8
9 #include "qobject.h"
10 #if !defined(Q_MOC_OUTPUT_REVISION)
11 #error "The header file 'qobject.h' doesn't include <QObject>."
12 #elif Q_MOC_OUTPUT_REVISION != 63
13 #error "This file was generated using the moc from 4.8.6. It"
14 #error "cannot be used with the include files from this version of Qt."
15 #error "(The moc has changed too much.)"
16 #endif
17
18 QT_BEGIN_MOC_NAMESPACE
19 static const uint qt_meta_data_QObject[] = {
20
21 // content:
22 6, // revision
23 0, // classname
24 0, 0, // classinfo
25 4, 14, // methods
26 1, 34, // properties
27 0, 0, // enums/sets
28 2, 37, // constructors
29 0, // flags
30 2, // signalCount
31
32 // signals: signature, parameters, type, tag, flags
33 9, 8, 8, 8, 0x05,
34 29, 8, 8, 8, 0x25,
35
36 // slots: signature, parameters, type, tag, flags
37 41, 8, 8, 8, 0x0a,
38 55, 8, 8, 8, 0x08,
39
40 // properties: name, type, flags
41 90, 82, 0x0a095103,
42
43 // constructors: signature, parameters, type, tag, flags
44 108, 101, 8, 8, 0x0e,
45 126, 8, 8, 8, 0x2e,
46
47 0 // eod
48 };
49
50 static const char qt_meta_stringdata_QObject[] = {
51 "QObject\0\0destroyed(QObject*)\0destroyed()\0"
52 "deleteLater()\0_q_reregisterTimers(void*)\0"
53 "QString\0objectName\0parent\0QObject(QObject*)\0"
54 "QObject()\0"
55 };
56
57 void QObject::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
58 {
59 if (_c == QMetaObject::CreateInstance) {
60 switch (_id) {
61 case 0: { QObject *_r = new QObject((*reinterpret_cast< QObject*(*)>(_a[1])));
62 if (_a[0]) *reinterpret_cast<QObject**>(_a[0]) = _r; } break;
63 case 1: { QObject *_r = new QObject();
64 if (_a[0]) *reinterpret_cast<QObject**>(_a[0]) = _r; } break;
65 }
66 } else if (_c == QMetaObject::InvokeMetaMethod) {
67 Q_ASSERT(staticMetaObject.cast(_o));
68 QObject *_t = static_cast<QObject *>(_o);
69 switch (_id) {
70 case 0: _t->destroyed((*reinterpret_cast< QObject*(*)>(_a[1]))); break;
71 case 1: _t->destroyed(); break;
72 case 2: _t->deleteLater(); break;
73 case 3: _t->d_func()->_q_reregisterTimers((*reinterpret_cast< void*(*)>(_a[1]))); break;
74 default: ;
75 }
76 }
77 }
78
79 const QMetaObjectExtraData QObject::staticMetaObjectExtraData = {
80 0, qt_static_metacall
81 };
82
83 const QMetaObject QObject::staticMetaObject = {
84 { 0, qt_meta_stringdata_QObject,
85 qt_meta_data_QObject, &staticMetaObjectExtraData }
86 };
87
88 #ifdef Q_NO_DATA_RELOCATION
89 const QMetaObject &QObject::getStaticMetaObject() { return staticMetaObject; }
90 #endif //Q_NO_DATA_RELOCATION
91
92 const QMetaObject *QObject::metaObject() const
93 {
94 return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
95 }
96
97 void *QObject::qt_metacast(const char *_clname)
98 {
99 if (!_clname) return 0;
100 if (!strcmp(_clname, qt_meta_stringdata_QObject))
101 return static_cast<void*>(const_cast< QObject*>(this));
102 return 0;
103 }
104
105 int QObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
106 {
107 if (_id < 0)
108 return _id;
109 if (_c == QMetaObject::InvokeMetaMethod) {
110 if (_id < 4)
111 qt_static_metacall(this, _c, _id, _a);
112 _id -= 4;
113 }
114 #ifndef QT_NO_PROPERTIES
115 else if (_c == QMetaObject::ReadProperty) {
116 void *_v = _a[0];
117 switch (_id) {
118 case 0: *reinterpret_cast< QString*>(_v) = objectName(); break;
119 }
120 _id -= 1;
121 } else if (_c == QMetaObject::WriteProperty) {
122 void *_v = _a[0];
123 switch (_id) {
124 case 0: setObjectName(*reinterpret_cast< QString*>(_v)); break;
125 }
126 _id -= 1;
127 } else if (_c == QMetaObject::ResetProperty) {
128 _id -= 1;
129 } else if (_c == QMetaObject::QueryPropertyDesignable) {
130 _id -= 1;
131 } else if (_c == QMetaObject::QueryPropertyScriptable) {
132 _id -= 1;
133 } else if (_c == QMetaObject::QueryPropertyStored) {
134 _id -= 1;
135 } else if (_c == QMetaObject::QueryPropertyEditable) {
136 _id -= 1;
137 } else if (_c == QMetaObject::QueryPropertyUser) {
138 _id -= 1;
139 }
140 #endif // QT_NO_PROPERTIES
141 return _id;
142 }
143
144 // SIGNAL 0
145 void QObject::destroyed(QObject * _t1)
146 {
147 void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
148 QMetaObject::activate(this, &staticMetaObject, 0, _a);
149 }
150 QT_END_MOC_NAMESPACE

仅供参考,做一些深层次的分析

转自:http://www.cnblogs.com/lfsblack/p/5319437.html

8、QObject类 moc处理后代码的更多相关文章

  1. QObject类 moc处理后代码

    QObject在QT中是所有类的基类,经过MOC处理后代码如下 之所以贴出这段代码,是因为很多流程追踪到最后一些关键性函数都是出自这个类 源码 4.8.6 MOC版本 63 /************ ...

  2. JD-GUI反编译后代码逻辑分析

    一,用jd-gui.exe等工具查看源代码.如何你不会,可以参看此文章: http://blog.csdn.net/hp_2008/article/details/8207879 可以到以下连接下载可 ...

  3. [置顶] NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析--吐血放送

    NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析,限于个人水平,如有错误请留言指出! TcpSink类的recv()方法: void TcpSink::recv(Packet ...

  4. 1.QObject类

    简述 QObject类是所有Qt对象的基类. QObject是Qt对象模型的核心. 该模型的核心特征是称为信号和槽的对象通信机制. 您可以使用connect()将信号连接到槽,并用disconnect ...

  5. 关于 QObject 类

    1.QObject类   简述 QObject类是所有Qt对象的基类. QObject是Qt对象模型的核心. 该模型的核心特征是称为信号和槽的对象通信机制. 您可以使用connect()将信号连接到槽 ...

  6. C++派生类中如何初始化基类对象(五段代码)

    今天收到盛大的面试,问我一个问题,关于派生类中如何初始化基类对象,我在想派生类对于构造函数不都是先构造基类对象,然后在构造子类对象,但是如果我们在成员初始化列表先初始化派生类的私有成员,在函数内去调用 ...

  7. Qt::QObject类

    QObject 类是Qt 所有类的基类. QObject是Qt对象模型的核心.这个模型的中心要素就是一种强大的叫做信号与槽无缝对象沟通机制.你可以用 connect()函数来把一个信号连接到槽,也可以 ...

  8. 谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制

    五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; publ ...

  9. 关于QObject类的一些理解

    QRunnable并没有继承自QObject,所以它和其他QObject组件的通信不能使用传统的信号和槽,要是用信号和槽我们必须将其继承自QObject自动的添加 QThread的退出最好用exit( ...

随机推荐

  1. js获取checkbox复选框获取选中的选项

    js获取checkbox复选框获取选中的选项 分享下javascript获取checkbox 复选框获取选中的选项的方法. 有关javascript 获取checkbox复选框的实例数不胜数.js实现 ...

  2. 菜鸟学Java(十八)——异常

    每个学编程的人在编程的过程中都会遇到各种异常.那么当我们遇到异常的时候该怎么处理呢?针对不同的异常我们又该采取什么具体的处理方式呢?这些问题在我开始学编程的很长一段时间里我都不太清楚,还好随着不断的学 ...

  3. 在vue-cli生成的项目中使用karma+chrome进行单元测试

    用vue-cli生成项目时,如果选择了单元测试,那么会采用karma+mocha作为单元测试框架,默认使用的浏览器是PhantomJs. Karma 是一个基于Node.js的JavaScript测试 ...

  4. WinEdt 6+SumatraPDF -- 实现TeX文档和PDF文件正反向搜索

    这几天试用了新出不久的WinEdt 6,结合PDF文件的阅读器SumatraPDF,感觉实现TeX文档和PDF文件之间的正反向搜索十分便利,故此向大家特别推荐! CTeX v2.8版本的一项重要功能是 ...

  5. Asp.Net模拟post提交数据方法

    方法1: System.Net.WebClient WebClientObj = new System.Net.WebClient(); System.Collections.Specialized. ...

  6. hive的row_number()函数

    hive的row_number()函数 功能 用于分组,比方说依照uuid分组 组内可以依照某个属性排序,比方说依照uuid分组,组内按照imei排序 语法为row_number() over (pa ...

  7. hive外部表删除遇到的一个坑

    hive外部表删除遇到的一个坑 操作步骤 创建某个表(create external table xxx location xxx) 插入数据(insert xxx select xxx from x ...

  8. 对dump的文件进行状态统计

    1.jps -lvm  查出pid 2.jstack  pid >1.dump 3.grep java.lang.Thread.State 1.dump| awk '{print $2$3$4$ ...

  9. 【转】更改 shell 终端的默认键绑定为 vi 模式

    我们使用的 shell 终端是 bash,它的默认键绑定方式是 emacs 模式.比如键入 Ctrl+a 光标会停在行首,Ctrl+e 光标会停在行尾等等. 如果希望在终端输入时使用 vi 的模式,比 ...

  10. C语言引用连接脚本lds中的符号——清除bss段,c实现方式

    之前我们的启动文件清除bss和拷贝都是通过汇编的方式的实现,但是,我们能够使用C语言,就不使用汇编: 先看连接脚本: SECTIONS { . = 0x30000000; __code_start = ...