QScopedPointer 是否隐藏了多重继承

Does QScopedPointer hide multiple inheritance

本文关键字:多重继承 隐藏 是否 QScopedPointer      更新时间:2023-10-16

我在访问 PIMPL 设计的私密部分时遇到问题。"当然!"你应该是! 好吧,我正在编写一些功能测试,所以我不在乎我正在访问私有成员,好吗?:-)

为了达到目的,我使用指向私有实现的 QScopedPointer 设置了公共类,如下所示;

class CV {
...
private:
QScopedPointer<PrivateCV> const _d_ptr;
PrivateChartView * d();
const PrivateChartView *d() const;
};
PrivateCV * CV::d()
{ 
return _d_ptr.data(); 
}
const PrivateCV* CV::d() const
{ 
return _d_ptr.data(); 
}

私有位如下所示:

class PrivateCV : public QObject, public Ui_CVForm
{
Q_OBJECT 
friend class MyTestClass;
public:
...
public slots:    
void do_something();
}

似乎 MyTestClass 可以访问 PrivateCV 的 do_something() 成员函数,它获得如下(伪代码,obvs):

CV *cv = MyApp::get_a_cv();
PrivateCV *pcv = cv->d();

即它会称之为罚款:

pcv->do_something();

但我无法访问Ui_CVForm上的任何内容(从 uic 生成的 UI 类)。 Ui_CVForm(部分)如下:

class Ui_CVForm
{
public:
QGridLayout *gridLayout_2;
QGroupBox *groupBox;
QLineEdit *lineEdit;
};

这是否与函数 d() 或 QScopedPointer 的常量有关? 当我在CV内部时,我可以毫无问题地访问PrivateCV的UI表单元素。

void CV::and_another_thing()
{
d()->lineEdit->setText("wtfa");    
}

任何指针(双关语)最受欢迎!

好吧,这原来是由于一些白痴(我)对不同库中的两个不同类使用相同的文件名。 测试库正在为不包含上述 lineEdit 之类的项目的Ui_CVForm选择一个标题,而 PrivateCV 正在使用另一个......因此,没有抱怨在编译时看不到标头。