0
我无法访问PIMPL设计的私有部分。 “当然!”,你说!你应该是! 那么,我正在写一些功能测试,所以我不在乎我正在访问私人成员,好吗? :-)QScopedPointer是否隐藏多重继承
为了说明问题,我将公共类与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吧? 当我在里面的简历,我也没有任何问题访问PrivateCV的UI表单元素..
void CV::and_another_thing()
{
d()->lineEdit->setText("wtfa");
}
任何指针(双关语意)最欢迎!
你有没有把ui表格的头部拉到你试图访问它的东西的地方? – Zeks
要访问私人会员,您可以:A)使测试班/功能成为“朋友”。 B)使用g ++的'-fno-access-control'选项(不是我一般推荐它,但它可以*用于测试)。 –
我想这可能和标题一样简单。如果它看不到ui头部,我想我会遇到编译问题(doffeeent Ines!)。我会稍后再试。 – mike