• 4236阅读
  • 0回复

[提问]如何调用QTableViewPrivate的非内联函数? [复制链接]

上一主题 下一主题
离线plainzw
 

只看楼主 倒序阅读 楼主  发表于: 2011-02-14
通常,访问一个Qt类的私有类的成员时,只需要定义一个派生类继承该Qt类,在派生类的private域中定义Q_DECLARE_PRIVATE宏,在实现代码中定义Q_D宏即可通过d变量实现对Qt私有类成员的访问,但我在继承QTableView的过程中却遇到了一些问题,代码如下:

头文件:
  1. #include <QTableView>
  2. #include <QTableView>
  3. class SpreadsheetPrivate;
  4. class Spreadsheet : public QTableView
  5. {
  6.   Q_OBJECT
  7. public:
  8.   Spreadsheet();
  9.   void test();
  10. protected:
  11. private:
  12.   Q_DECLARE_PRIVATE(Spreadsheet)
  13. };


源文件:
  1. #include <QtGui>
  2. #include <private/qtableview_p.h>
  3. #include "Spreadsheet.h"
  4. class SpreadsheetPrivate: public QTableViewPrivate
  5. {
  6. };
  7. Spreadsheet::Spreadsheet()
  8. {
  9. }
  10. void Spreadsheet::test()
  11. {
  12.   Q_D(Spreadsheet);
  13.   //在这里出现问题
  14. }


问题是,在注释的地方调用QTableViewPrivate的成员变量或内联函数时,代码的编译和链接都没有问题;但是,如果调用QTableViewPrivate的普通成员函数,则编译没有问题,链接时会出现“undefined reference to ‘QTableViewPrivate::xxxx()’"错误(xxxx代码调用的函数名) 。查看Qt源代码,QTableView对基类私有类的调用也与上述方式一致。该问题一直没有找到解决办法。


请问大家这个问题出现的原因是什么?应该怎样才能正确调用基类私有类的成员函数呢?谢谢!
快速回复
限100 字节
 
上一个 下一个