我遇到了如何在Qt中设计类以防止代码混乱的问题。
我的MainWindow有很多Buttons
,Labels
和其他小部件。我不想将其设置得太大,并且希望在单独的类中处理按钮按下的回调。
问题是,我想将关于Button
印刷机和字符串条目的所有信息传递到LineEdits
到班上尽可能容易。因此,我制作了一个仅保存数据的类(Data
)。
测试代码中的另一个类名为MainModule
,它只是执行主循环并接收按钮按下的结果。另外,我必须根据MainModule
中发生的变化将更改发送回去,以便我可以设置Labels
,依此类推。我对MainWindow
和MainModule
类都使用了指向数据类的指针。
第4类和第3类只是类的一些示例,这些类在我的MainModule
周围具有其他功能。有些需要更多的数据,有些需要更少的数据,因此它们要么引用了Data
,要么只是将一些变量传递给了它们。
我遇到的另一个问题是数据的保存和加载。添加按钮或标签时,我必须在课堂上进行很多更改。我想摆脱这种高度耦合,而不必让MainWindow
类承担太多责任。
我也听说过设计模式model-view-controller(MVC)可以轻松解决这一问题,但是这里的问题是,当我遇到{{1} }是视图,还可以同时处理所有控件吗?
答案 0 :(得分:40)
首先,您应该担心。您绝对不希望您的班级承担超出其主要职能的职责。您的每个班级应有特定的用途,并在范围上受限制。我建议阅读Bob叔叔的Clean Code,以便对此进行深入的讨论。
对于您的问题:我假设您当前正在通过将QButtons
和自己的QLineEdits
连接到signals
(例如,请参见slots
等)来接收用户操作Qt Signals and Slots)。您可能会缺少的是,您不仅限于将给定信号连接到单个插槽,还可以跨多个类别将它们连接到多个插槽。
因此,如果您有两个类,一个与UI相关,一个与数据收集相关,都需要接收按钮的单击,则只需将单击连接到两个插槽即可。使您的数据收集类继承QObject
,使其具有信号/插槽机制。
作为一个例子,这是图像的模型(从上面的Qt链接借来的)。我添加了以红色绘制的信号: