Qt之QObject
简介
QObject是qt中所有对象的基类,也是信号槽的基础
结构
QObjectData
:作为pimpl的抽象类
QObject
中包含实现类的指针
protected:QScopedPointer<QObjectData> d_ptr;
而QObjectData
中包含指向QObject
的指针
public:QObject *q_ptr;
QObject
与QObjectData
相互获取(也就是具体对象指针与具体对象的实现指针)是通过qglobal.h中定义的Q_DECLARE_PRIVATE
和Q_DECLARE_PUBLIC
Q_DECLARE_PRIVATE
在接口类中使用,用于定义获取具体实现类的指针,以及声明实现类为友元
#define Q_DECLARE_PRIVATE(Class) \inline Class##Private* d_func() \{ Q_CAST_IGNORE_ALIGN(return reinterpret_cast<Class##Private *>(qGetPtrHelper(d_ptr));) } \inline const Class##Private* d_func() const \{ Q_CAST_IGNORE_ALIGN(return reinterpret_cast<const Class##Private *>(qGetPtrHelper(d_ptr));) } \friend class Class##Private;
Q_DECLARE_PUBLIC
在具体实现类中使用,用于定义获取具体类的指针以及声明接口类为友元
#define Q_DECLARE_PUBLIC(Class) \inline Class* q_func() { return static_cast<Class *>(q_ptr); } \inline const Class* q_func() const { return static_cast<const Class *>(q_ptr); } \friend class Class;
在连接到成员函数指针时,使用的是模板,其定义在qobjectdefs_impl.h中