在qt中,可以使用Q_DECLARE_PRIVATE配合Q_D来实现类似C++中PIMPL
Q_DECLARE_PRIVATE宏定义展开后为:
则代码中第29行展开后为:
声明了两个返回d_ptr的指针的函数d_func,以及一个友元类MainWindowPrivate。
第6行的前置声明也有固定的名称组合class+Private,因为在宏定义中已经规定了声明的类名称
同样,第25行的d_ptr指针也是固定的名称,并且用了智能指针
|
|
MainWindow.h中的前置声明在cpp实现,实现中需要注意的是Q_DECLARE_PUBLIC以及q_ptr
Q_DECLARE_PUBLIC的展开式为
所以Q_DECLARE_PUBLIC(MainWindow)展开后为
所以,需要在类中声明一个固定名称q_ptr的指针
在MainWindow中,则需要用到Q_D宏定义,展开后则为
则Q_D(const MainWindow)展开后为:
所以在使用Q_D(const MainWindow)后,则可以用d指针对封装在MainWindowPrivate内的数据进行读取或者操作
注意,如果需要修改数据,则不应该增加const,应该为Q_D(const MainWindow)
在MainWindowPrivate中,则可以使用Q_Q来获取Mainwindow的指针Q_Q的展开为:
声明后则可以使用q来访问Mainwindow中的数据