QT中的Q_D指针与Q_Q指针

Q_D指针主要是为了二进制兼容问题。

一、Q_D指针

主类获取其私有类的指针。

Q_D宏的定义是这样的:

 这里可以看到,使用Q_D宏之后使用的d,其实是私有类的指针。再来看看d_func()

 整个d_func()的作用就是获取这个这个类里面的d_ptr

每个类都会在头文件中添加这个宏,这样使用d_func()的时候就会返回自己的私有类的指针。

那这个d_ptr是在哪里定义的呢?是在qobject类里面。

 

这个QScopedPointer是qt中的智能指针。

总结一下,d_func()就是获取这个类私有类的指针,主要作用是二进制兼容用。

二、Q_Q指针

私有类获取其主类指针。

Q_Q宏的定义是这个。

 而q_func()是在这个宏里面定义的:

这个宏通常是在类的私有类中使用。

 

q_func()的具体实现,是获取普通类的指针,结合这个宏在私有类中的定义,那么Q_Q指针的用法就了然了,就是私有类获取普通类指针。

那么这个q_ptr是在哪里定义的呢?

QObjectPrivate继承了QObjectData,这个q_ptr就是在这里定义的。

 总结一下,Q_Q指针是私有类获取主类指针用的。

 
posted @   手磨咖啡  阅读(1262)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2021-06-28 QT -- float转ushort,用QImage 显示32float格式图像(CV_32FC1)
点击右上角即可分享
微信分享提示