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。