将数据处理与GUI分开

时间:2015-12-15 10:25:11

标签: qt oop design-patterns class-design

我正在开发一个具有图形用户界面的网络测试工具。我现在面临的问题是,我无法将基础数据与GUI类分开。 该应用程序由QMainWindow组成,然后生成其他几个QDialogs并且有一些QWidgets。在每个类中,都有一些使用QLineEditsQPushButtons等功能,并且数据也存储在每个类中。现在,为了使用有关设备的数据,例如DeviceDiscovery我需要使用的MainWindow窗口小部件

deviceId = self.widget_deviceDiscovery.devices['devName'].id

而不是能够将其存储在整个GUI之外。但是我怎么能做到这一点?将数据存储在GUI类中似乎是不对的。

1 个答案:

答案 0 :(得分:2)

  

将数据存储在GUI类中似乎没有用。

当然不是,但是我再也看不出如何在UI中存储任何内容。数据存储在文件中。如果您的意思是从视图对象获取内容并在某些操作发生时应用它,那通常就可以了(ish)。

例如 - 您有一个'登录'屏幕有两个可编辑的文本视图和一个按钮。按下按钮在代码中的某处,有一个组件(通常类似于Observer),它从文本视图中提取值并启动登录过程。这是您的标准GUI框架,这是可以的,因为这些框架实际上是按设计分开的,因为它们通常遵循MVC / P模式。数据和BL留待您处理,因为这些显然是应用程序细节。

这些框架的缺点是测试变得有些难以完成,状态从小部件中拉出来。当应该支持不同的UI框架时,状态管理正在重写每个框架,这是一个开销。

有一个名为Presentation Model的模式,它将两个层完全分开(GUI与Presentation),并允许您处理不同层中的两个概念。大多数绑定框架都建立在这个概念之上。