diff --git a/QtMetaAboutClass/QtMetaAboutClass.pro b/QtMetaAboutClass/QtMetaAboutClass.pro
new file mode 100644
index 0000000..80107d8
--- /dev/null
+++ b/QtMetaAboutClass/QtMetaAboutClass.pro
@@ -0,0 +1,20 @@
+QT -= gui
+
+CONFIG += c++11 console
+CONFIG -= app_bundle
+
+# You can make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+        main.cpp
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
+
+HEADERS += \
+    m.h
+
diff --git a/QtMetaAboutClass/m.h b/QtMetaAboutClass/m.h
new file mode 100644
index 0000000..62bbaf3
--- /dev/null
+++ b/QtMetaAboutClass/m.h
@@ -0,0 +1,10 @@
+#ifndef M_H
+#define M_H
+
+#include<QObject>
+class A:public QObject{ Q_OBJECT};
+class B:public A{ Q_OBJECT};
+class C:public QObject{Q_OBJECT};
+class D:public C{};
+
+#endif // M_H
diff --git a/QtMetaAboutClass/main.cpp b/QtMetaAboutClass/main.cpp
new file mode 100644
index 0000000..838b29e
--- /dev/null
+++ b/QtMetaAboutClass/main.cpp
@@ -0,0 +1,47 @@
+#include "m.h"
+#include <QMetaMethod>
+#include <iostream>
+using namespace std;
+
+//使用反射机制获取与类相关的信息
+//   1、QMetaObject 类中获取与类相关的信息的成员函数有
+// const char* className() const;
+//   获取类的名称,注意,若某个 QObject 的子类未启动元对象系统(即未使用 Q_OBJECT
+//   宏),则该函数将获取与该类最接近的启动了元对象系统的父类的名称,而不再返回
+//   该类的名称,因此建议所有的 QObject 子类都使用 Q_OBJECT 宏。
+
+// const QMetaObject* superClass() const;
+//   //返回父类的元对象,若没有这样的对象则返回 0。  bool inherits(const QMetaObject* mo) const; (Qt5.7)
+//   //若该类继承自 mo 描述的类型,则返回 true,否则返回 false。类被认为继承自身。
+
+//   2、QObject 类中获取与类相关的信息的成员函数有
+// bool inherits(const char* className) const;
+//   //若该类是className 指定的类的子类则返回true,否则返回false。类被认为继承自身。
+
+int main(){
+    A ma;
+    B mb;
+    C mc;
+    D md;
+
+    const QMetaObject *pa=ma.metaObject();
+    const QMetaObject *pb=mb.metaObject();
+
+    cout<<pa->className()<<endl; //输出类名 A
+    //使用 QMetaObject::inherits()函数判断继承关系。
+    cout<<pa->inherits(pa)<<endl; //输出 1,类被认为是自身的子类
+    cout<<pa->inherits(pb)<<endl; //输出 0,由 pb 所描述的类 B 不是类 A 的子类。
+    cout<<pb->inherits(pa)<<endl; //输出 1,由 pa 所描述的类 A 是类 B 的子类。
+
+    //使用 QObject::inherits()函数判断继承关系。
+    cout<<ma.inherits("B")<<endl; //输出 0,类 A 不是类 B 的子类。
+    cout<<ma.inherits("A")<<endl; //输出 1,类被认为是自身的子类
+    cout<<md.inherits("D")<<endl; //输出 0,因为类 D 未启动元对象系统。
+    cout<<md.inherits("C")<<endl; //输出 1,虽然类 D 未启动元对象系统,但类 C 已启动,此种情形下能正确判断继承关系.
+
+
+    //输出 C,此处未输出 D,因为类 D 未启动元对象系统,与类 D 最接近的启动了元对象系统的父类是 C,因此返回 C。
+    cout<<md.metaObject()->className()<<endl;
+
+    return 0;
+}