首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

请教怎么调用QTableViewPrivate的非内联函数

2012-07-28 
请问如何调用QTableViewPrivate的非内联函数?通常,访问一个Qt类的私有类的成员时,只需要定义一个派生类继

请问如何调用QTableViewPrivate的非内联函数?
通常,访问一个Qt类的私有类的成员时,只需要定义一个派生类继承该Qt类,在派生类的private域中定义Q_DECLARE_PRIVATE宏,在实现代码中定义Q_D宏即可通过d变量实现对Qt私有类成员的访问,但我在继承QTableView的过程中却遇到了一些问题,代码如下:

头文件:

C/C++ code
#include <QTableView>#include <QTableView>class SpreadsheetPrivate;class Spreadsheet : public QTableView{  Q_OBJECTpublic:   Spreadsheet();  void test(); protected:private:   Q_DECLARE_PRIVATE(Spreadsheet)}; 


源文件:
C/C++ code
#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对基类私有类的调用也与上述方式一致。这个问题一直困扰着我。


请问大家这个问题出现的原因是什么?应该怎样才能正确调用基类私有类的成员函数呢?谢谢!

[解决办法]
私有(private)成员通过这样的办法是没办法调用的。

你这个办法可以调用保护(protected)
[解决办法]
因为qtgui.dll中没有导出QTableViewPrivate的符号表,所以需要自己加入QTableViewPrivate的实现。
找到qt源代码中的QTableView.cpp,把其中的QTableViewPrivate实现提出来放到一个单独的cpp里,比如叫QTableViewPrivate.cpp。另外我试了试QTableViewPrivate还依赖QAbstractItemViewPrivate,同样,自己再建一个QAbstractItemViewPrivate.cpp,添加QAbstractItemViewPrivate的实现,这样就行了

热点排行