在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
中的数据