通常,访问一个Qt类的私有类的成员时,只需要定义一个派生类继承该Qt类,在派生类的private域中定义Q_DECLARE_PRIVATE宏,在实现代码中定义Q_D宏即可通过d变量实现对Qt私有类成员的访问,但我在继承
QTableView的过程中却遇到了一些
问题,代码如下:
头文件:
- #include <QTableView>
- #include <QTableView>
- class SpreadsheetPrivate;
- class Spreadsheet : public QTableView
- {
- Q_OBJECT
- public:
- Spreadsheet();
- void test();
- protected:
- private:
- Q_DECLARE_PRIVATE(Spreadsheet)
- };
源文件:
- #include <QtGui>
- #include <private/qtableview_p.h>
- #include "Spreadsheet.h"
- class SpreadsheetPrivate: public QTableViewPrivate
- {
- };
- Spreadsheet::Spreadsheet()
- {
- }
- void Spreadsheet::test()
- {
- Q_D(Spreadsheet);
- //在这里出现问题
- }
问题是,在注释的地方调用QTableViewPrivate的成员变量或内联函数时,代码的
编译和链接都
没有问题;但是,如果调用QTableViewPrivate的普通成员函数,则编译没有问题,链接时会出现“undefined reference to ‘QTableViewPrivate::xxxx()’"错误(xxxx代码调用的函数名) 。查看Qt源代码,QTableView对基类私有类的调用也与上述方式一致。该问题一直没有找到解决办法。
请问大家这个问题出现的原因是什么?应该怎样才能正确调用基类私有类的成员函数呢?谢谢!