首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型视图控制器

模型视图控制器
EN

Stack Overflow用户
提问于 2009-01-24 00:41:40
回答 6查看 899关注 0票数 3

我的GUI中有一个树形控件(自然会有很多GUI/平台特定的函数来处理节点)。

我有一个数据模型,它有自己的一组复杂的节点、子节点、属性等。

我希望树显示模型的表示,能够向模型中的节点发送消息,并在模型更改时被告知重新绘制自身。

但我不希望GUI代码需要知道模型数据类型的详细信息,也不希望通过将模型链接到GUI类来污染模型。

我搞不懂控制器应该怎么做,它应该提供什么功能?

(这是在C++中实现的,但这无关紧要)

EN

回答 6

Stack Overflow用户

发布于 2009-01-24 04:11:39

GUI“控件”不太适合模型-视图-控制器模式,因为它们通常有自己的内部模型,而不是接受对一个模型的引用。如果控件以这种方式构造,则需要一个适配器类将控件的内部模型“数据绑定”到基础数据模型。

除了适配器类同时扮演视图挂钩组件(从数据模型更新GUI )和控制器(将GUI事件解释为模型操作)的角色之外,这可以实现与模型-视图-控制器类似的功能。

票数 2
EN

Stack Overflow用户

发布于 2009-01-24 00:45:11

Qt为model-view programming提供了一组类。例如,您可以将树视图连接到文件系统模型,但两者都不直接了解对方的任何信息(除了指向视图中模型的指针)。

票数 1
EN

Stack Overflow用户

发布于 2009-01-24 01:00:54

您的要求是:

  • 树显示模型的表示
  • 树中的节点可以向模型中的节点发送消息
  • 树根据模型更改重绘自身

我不知道您在这里处理的是哪种类型的数据,但分层模型是一件相当简单的事情。我将假定您知道如何迭代分层数据和填充树视图。

您的控制器应该具有用于向模型发送消息的成员函数。参数应该是一个模型元素和您想要发送的消息。这样,UI完全不知道消息是如何到达元素的,但可以让消息通过。

最后一个需求更加棘手,并且依赖于一些东西(例如,控制器的生命周期、应用程序架构等)。我假设控制器的生命周期和树视图一样长。如果是这样,那么您的控制器应该提供一种方法来设置模型更改的回调。然后,当控制器更改模型时,它可以在不知道UI的情况下回调到UI。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/475218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档