繁体   English   中英

QScopedPointer是否隐藏多个继承

[英]Does QScopedPointer hide multiple inheritance

我在访问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");    
}

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

好的,这是由于某些白痴(me)对不同库中的两个不同类使用相同文件名所致。 测试库正在为Ui_CVForm拾取一个头,该头不包含上面的lineEdit之类的内容,而PrivateCV正在使用另一个头...因此,对于在编译时看不到头的情况没有任何抱怨。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM