[英]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.