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