1, 防止头文件重复包含

#ifndef QOBJECT_H
#define QOBJECT_H

2, 条件编译

#ifndef QT_NO_QOBJECT
#endif

3, 前置声明类,用于类指针或引用的声明

class QEvent;
class QTimerEvent;

4, typedef 别名

typedef QList<QObject*> QObjectList;

5,类导出导入函数

#  define Q_DECL_EXPORT __declspec(dllexport)
# define Q_DECL_IMPORT __declspec(dllimport)

6, 私有类

class Q_CORE_EXPORT QObjectData {
};

7,用于继承的纯虚析构函数

virtual ~QObjectData() = 0;

8, explicit

Q_INVOKABLE explicit QObject(QObject *parent=nullptr);
```
C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生,声明为explicit的构造函数不能在隐式转换中使用。
9,虚成员函数,子类必须继承,也为虚函数。

virtual bool event(QEvent *event);

10, inline 内联函数,const函数表示该成员函数不会修改类的数据。否则会编译报错。 const *this;
inline bool isWidgetType() const { return d_ptr->isWidget; }

“`
11.,函数参数的默认参数

int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);

12,STL
template
13, 类static函数,只属于类,用ClassName::FunName();调用。

static QMetaObject::Connection connect(const QObject *sender, const char *signal,
const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);

14,const引用参数,常用

bool setProperty(const char *name, const QVariant &value);

15, friend

friend struct QMetaObject;