2013-12-11 85 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。如果您以后需要实际做更复杂的事情,那么只需删除并用更复杂的定义替换自动获取器/设置器即可。

相关问题