• 4597阅读
  • 3回复

谁能用较为浅显的语言概括一下QObject,QObjectData和QObjectPrivate三者之间的关系? [复制链接]

上一主题 下一主题
离线iiiyyyhhhsss
 

只看楼主 倒序阅读 楼主  发表于: 2009-10-19
如题  
离线cspp

只看该作者 1楼 发表于: 2009-10-20
QObject的数据封装在QObjectData;
定义为:
protected:
    QObjectData *d_ptr;

QObjectData属于QObject,
有定义:
QObject *q_ptr;。

QObjectPrivate类封装了线程处理,信号和槽机制等具体的实现。继承于QObjectData
QObject和QOjbectPrivate一般都是在构造的时候同时生成的。
也是有命名规范的,一般都是ClassName,ClassName##Private。

估计没说清出啥。。。
离线hiti_tony
只看该作者 2楼 发表于: 2009-10-20
接着1楼的说
1.d_ptr是QObject的一个QObjectData类型的成员指针,但不能直接指向QObjectData对象,因为QObjectData的析构是纯虚的,也就是说QObjectData这个class不能被直接实例化。

2.QOjbectPrivate是QObjectData的派生类,QOjbectPrivate可以实例化。

3.看看QObject的构造
QObject::QObject(QObject *parent)

    : d_ptr(new QObjectPrivate)

{

  // ………………………

}

d_ptr实际上是指向一个QObjectPrivate的对象。

至于为什么这样设计,还请知道的人来解答一下。
离线rqzrqh

只看该作者 3楼 发表于: 2009-10-20
好处很多。。
反正这就是OO思想
[ 此帖被rqzrqh在2009-10-20 17:52重新编辑 ]
快速回复
限100 字节
 
上一个 下一个