首页 > 解决方案 > 在 Qt 中设计应用程序架构的首选方法

问题描述

我的应用程序MainWindow分为三个主要部分:

在此处输入图像描述

问题是,所有三个部分都需要在它们之间进行通信。例如,您可以QListView在左侧部分选择项目,并根据所选项目选项在右侧部分更改。

我提出了三个解决方案:

  1. 绘制其中的所有内容,MainWindow这将成为MainWindow一个大的超类:

该解决方案解决了小部件之间通信的所有问题,因为它们都是其中的一部分,MainWindow::ui但随后我得到了一个大(可能是混乱的)类。

  1. 将每个部分放在它自己的类中并制作MainWindow一个单例:

这个解决方案是......好吧,一个单身人士。而且我真的不喜欢单身人士。我将可以MainWindow从任何地方访问(本质上我正在创建一个全局变量),并且我仍然必须通过 getter 公开MainWindow::ui(以及::ui其他部分的 s),这意味着一切都可以访问::uis。

  1. 将每个部分放在它自己的类中,并通过信号和插槽连接所有内容:

这可能是最好的解决方案,但是使用此解决方案,我需要为每个小部件创建 getter EachSection::ui(以便能够将其MainWindow与其对应的部件连接起来),我需要大量调用,connect()如果有两个插槽,我也会遇到问题对相同的信号做出反应,但它们需要按特定顺序做出反应。

那么最好的方法是什么?

标签: c++qtarchitecture

解决方案


最好的方法是定义视图之间的消息传递(协议),以便视图不是紧密耦合的(所有视图都是隔离的并且彼此不了解)一个实例类(主窗口)知道所有三个并将它们连接起来。想象一个按钮行编辑和标签,当你按下按钮标签时获得行编辑的值,按钮实现不依赖于lineedit实现,lineedit不依赖于标签等等,这三个类都可以扩展或改变并且不影响另外两个,因此您当时可以专注于其中一个。


推荐阅读