【问题标题】:Separating data handling from GUI将数据处理与 GUI 分离
【发布时间】:2016-12-29 15:03:53
【问题描述】:

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

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

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

【问题讨论】:

  • 如果有一个Data 类和其他类的实例访问Data 的属性呢?所以所有的数据都在一个类中......

标签: qt oop design-patterns class-design


【解决方案1】:

将数据存储在 GUI 类中似乎并不正确。

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

例如 - 您有一个“登录”屏幕,其中包含两个可编辑的文本视图和一个按钮。单击代码中某处的按钮后,有一个组件(通常类似于观察者)从文本视图中提取值并启动登录过程。那是您的标准 GUI 框架,这没关系,因为这些框架实际上是按设计分开的,因为它们通常遵循 MVC/P 模式。数据和 BL 由您自己处理,因为这些显然是应用程序的具体情况。

这些框架的缺点是测试变得有些难以完成,并且状态是从小部件中提取的。当应该支持不同的 UI 框架时,状态管理是针对每个框架重写的,这是一种开销。

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

【讨论】:

    猜你喜欢
    • 2012-10-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2016-11-13
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多