我的UI元素和模型对象应该具有什么级别的分离?

Nic*_*nes 0 c++ model-view-controller qt

我正在QT中构建​​一个桌面应用程序(尽管这可能是无关紧要的),我正在努力完成类结构和布局.数据模型相当简单,根容器包含多个项目容器.考虑以下表示:

Root
+ Parent
  + Child
Run Code Online (Sandbox Code Playgroud)

UI非常简单,并且遵循具有可滚动区域(根)的主窗口的数据模型,包含具有一些标签和按钮的自定义窗口小部件(子)的布局(父项)的窗口小部件.

我的麻烦在于处理需要上链的事件然后退回,例如将孩子从一个父母移动到另一个父母,移动元素,或更新影响几个到多个其他小部件的子元数据.

我目前正在拆分UI小部件和模型对象,但让每个小部件和相应的模型对象彼此指向并感觉很麻烦,我认为这导致了太多的维护.

小智 5

我建议遵循标准的MVC模式,并确保模型与视图之间没有依赖关系; 在您的情况下,这意味着虽然每个模型项都有一个小部件,但模型项不会引用其相应的小部件.

虽然MVC模式有很多种,但实现此目的的一种方法是使视图类监视模型以进行任何更改并相应地更新视图(这可以通过将视图类中的插槽连接到从中发出的信号来实现.模型类).用户通过视图发起的任何更改都可以是:

1)由模型通过简单的信号/插槽连接
直接处理2)由控制器类处理,该控制器类可以指导模型相应地更新

这些中的任何一个都会导致模型发出更新信号,这会导致您的视图更新.这样做的好处是无需更新模型即可更改视图(或添加其他视图).

我建议阅读Qt的模型/视图编程指南,以更好地理解MVC如何在Qt中工作,并查看是否存在可以使用而不是烘焙自己的类或接口(例如QAbstractItemModel).