2013-12-11 36 views
0

QWidget-Class的成員通常應該如何設計私人或公共?如何設計QWidget?

class MyWidget : public QWidget { 

    public: 
     MyWidget(QWidget *parent = 0); 
     QLineEdit *myLine; 
} 

class MyWidget : public QWidget { 

    public: 
     MyWidget(QWidget *parent = 0); 

    private: 
     QLineEdit *myLine; 
} 

我喜歡與私有成員的第二個定義,但這個版本是壞的測試,因爲我必須與findChild(QString的)成員的訪問權限。

其他部分應該是一個QWidget類嵌套其他小部件?問題是沒有直接訪問嵌套的小部件,並且這對於自動gui測試來說並不真正有用,其中鼠標點擊應該mabyee按下按鈕或其他東西。

+0

是什麼阻止您將成員函數添加到該類,例如'QLineEdit * MyWidget :: getLineEdit()const'? – vahancho

+0

爲什麼我應該使用這個解決方案的私人修改器?可能是#define私人公開,但好? – Andreas

+0

'#define private public'?這是一個笑話嗎? – vahancho

回答

2

第二種選擇通常被認爲是「最好的編程實踐「,如果你需要通過其他地方的代碼(包括你的測試套件)訪問私有成員,那麼你需要實現getter和setter。

通常,測試框架還應該使用API​​來訪問對象,而不是直接訪問成員,因爲這是您通常希望在單元測試中測試的API。如果你真的不能放棄測試框架應該直接訪問私有成員的概念,那麼你可以考慮使用C++的朋友類。但是你沒有聽到我的話。

如果您需要一般地訪問某些東西(如通過字符串名稱),那麼Qt Properties就是爲您設計的。因此,將你的物品聲明爲物業,並列出getters/setters/signals /等等。

另外:不幸的是,實現getter和setter是有點枯燥的工作,這就是爲什麼我最終實現了一個實現getter,setter和創建信號定義併發出信號的QtCreator plugin tool。如果您以後需要實際做更復雜的事情,那麼只需刪除並用更復雜的定義替換自動獲取器/設置器即可。

相關問題