Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何设计QWidget?_Qt_Private_Public_Qwidget - Fatal编程技术网

Qt 如何设计QWidget?

Qt 如何设计QWidget?,qt,private,public,qwidget,Qt,Private,Public,Qwidget,QWidget类的成员通常应该如何设计为私有还是公共 class MyWidget : public QWidget { public: MyWidget( QWidget *parent = 0); QLineEdit *myLine; } 或 我更喜欢私有成员的第二个定义,但是这个版本不适合测试,因为我无法使用findChild(QString)访问该成员 另一部分是QWidget类是否应该嵌套其他小部件?问题是不能直接访问嵌套的小部件,这对于自动gui

QWidget类的成员通常应该如何设计为私有还是公共

class MyWidget : public QWidget {

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

我更喜欢私有成员的第二个定义,但是这个版本不适合测试,因为我无法使用findChild(QString)访问该成员


另一部分是QWidget类是否应该嵌套其他小部件?问题是不能直接访问嵌套的小部件,这对于自动gui测试来说并没有真正的用处,在自动gui测试中,鼠标点击应该会按下按钮或其他东西

第二种选择通常被认为是“最佳编程实践”,如果您需要通过其他地方(包括您的测试套件)的代码访问私有成员,那么您需要实现getter和setter

通常,测试框架也应该使用API来访问对象,而不是直接访问成员,因为您通常希望在单元测试中测试API。如果你不能放弃测试框架应该直接访问私有成员的概念,那么你可以使用C++好友类来研究。但你没听我这么说

如果您需要以一般方式访问某些内容(如通过字符串名称),这正是我们为您设计的功能。因此,将您的项声明为属性,并以这种方式列出getter/setter/signals/等


旁白:不幸的是,实现getter和setter有些枯燥,这就是为什么我最终实现了一个实现getter、setter并创建信号定义和发出信号的函数。如果将来确实需要执行更复杂的操作,只需删除并用更复杂的定义替换自动getter/setter。

是什么阻止您向该类添加成员函数,例如
QLineEdit*MyWidget::getLineEdit()const
?我为什么要在这个解决方案中使用private修饰符?可能是#定义私有公共也很好吗?
#定义私有公共
?这是个玩笑吗?
class MyWidget : public QWidget {

   public:
       MyWidget( QWidget *parent = 0);

   private:
       QLineEdit *myLine;
}