C++ 在Qt中设计应用程序体系结构的首选方法
我有一个应用程序,它有C++ 在Qt中设计应用程序体系结构的首选方法,c++,qt,architecture,C++,Qt,Architecture,我有一个应用程序,它有main窗口,分为三个主要部分: 问题是,这三个部分都需要相互沟通。例如,在左侧部分中有一个QListView,您可以在其中选择项目,并且根据所选项目的不同,右侧部分中的选项会发生变化 我提出了三个解决方案: 在MainWindow中绘制所有内容,这将使MainWindow成为一个大的超类: 这个解决方案解决了小部件之间通信的所有问题,因为它们都是MainWindow::ui的一部分,但是我得到了一个大类(可能很混乱) 将每个部分放在它自己的类中,并将main窗口 这个解
main窗口
,分为三个主要部分:
问题是,这三个部分都需要相互沟通。例如,在左侧部分中有一个QListView
,您可以在其中选择项目,并且根据所选项目的不同,右侧部分中的选项会发生变化
我提出了三个解决方案:
MainWindow
中绘制所有内容,这将使MainWindow
成为一个大的超类:MainWindow::ui
的一部分,但是我得到了一个大类(可能很混乱)
main窗口
MainWindow
(本质上我正在创建一个全局变量),并且我仍然必须通过getter公开MainWindow::ui
(和其他部分的::ui
),这意味着所有内容都可以访问:ui
s
EachSection::ui
为每个小部件创建getter(为了能够在MainWindow
中与其对应的小部件相连接),我需要大量调用connect()
如果两个插槽对同一信号做出反应,但它们需要按特定顺序作出反应,我也会遇到问题
那么最好的方法是什么呢?最好的方法是定义视图之间的消息传递(协议),这样视图就不会紧密耦合(所有视图都是孤立的,彼此不知道)。一个实例类(主窗口)知道所有三个视图,并将它们连接起来。设想一个按钮行编辑和标签,当您按下按钮标签获取行编辑值时,按钮实现不依赖于行编辑实现,行编辑不依赖于标签等等,所有三个类都可以扩展或更改,并且不会影响其他两个类,因此,您可以同时关注其中一个问题。一个基于观点的问题。无论如何,您应该按用途划分UI元素,因此如果您认为有许多元素直接属于
MainWindow
,只需将它们全部放在MainWindow
UI中即可。在QT中,通过调用myObj->findChild()
可以轻松访问子对象。如果您的MainWindow
的某个部分是一个具有自己特定行为的复杂小部件,只需将其作为一个单独的类,并将该类的一个或多个实例放在您的MainWinow
UI中。我建议编辑该问题,并使用其中一个解决方案将其集中在某个特定问题上。我的快速猜测是你想要接近1或3。