您如何使用许多小部件在Qt中设计类?

时间:2018-10-12 20:43:37

标签: c++ qt

我遇到了如何在Qt中设计类以防止代码混乱的问题。

我的MainWindow有很多ButtonsLabels和其他小部件。我不想将其设置得太大,并且希望在单独的类中处理按钮按下的回调。

问题是,我想将关于Button印刷机和字符串条目的所有信息传递到LineEdits到班上尽可能容易。因此,我制作了一个仅保存数据的类(Data)。

测试代码中的另一个类名为MainModule,它只是执行主循环并接收按钮按下的结果。另外,我必须根据MainModule中发生的变化将更改发送回去,以便我可以设置Labels,依此类推。我对MainWindowMainModule类都使用了指向数据类的指针。

第4类和第3类只是类的一些示例,这些类在我的MainModule周围具有其他功能。有些需要更多的数据,有些需要更少的数据,因此它们要么引用了Data,要么只是将一些变量传递给了它们。

我遇到的另一个问题是数据的保存和加载。添加按钮或标签时,我必须在课堂上进行很多更改。我想摆脱这种高度耦合,而不必让MainWindow类承担太多责任。

UML diagramm

我也听说过设计模式model-view-controller(MVC)可以轻松解决这一问题,但是这里的问题是,当我遇到{{1} }是视图,还可以同时处理所有控件吗?

1 个答案:

答案 0 :(得分:40)

首先,您应该担心。您绝对不希望您的班级承担超出其主要职能的职责。您的每个班级应有特定的用途,并在范围上受限制。我建议阅读Bob叔叔的Clean Code,以便对此进行深入的讨论。

对于您的问题:我假设您当前正在通过将QButtons和自己的QLineEdits连接到signals(例如,请参见slots等)来接收用户操作Qt Signals and Slots)。您可能会缺少的是,您不仅限于将给定信号连接到单个插槽,还可以跨多个类别将它们连接到多个插槽。

因此,如果您有两个类,一个与UI相关,一个与数据收集相关,都需要接收按钮的单击,则只需将单击连接到两个插槽即可。使您的数据收集类继承QObject,使其具有信号/插槽机制。

作为一个例子,这是图像的模型(从上面的Qt链接借来的)。我添加了以红色绘制的信号:

enter image description here