我的GUI中有一个树形控件(自然会有很多GUI/平台特定的函数来处理节点)。
我有一个数据模型,它有自己的一组复杂的节点、子节点、属性等。
我希望树显示模型的表示,能够向模型中的节点发送消息,并在模型更改时被告知重新绘制自身。
但我不希望GUI代码需要知道模型数据类型的详细信息,也不希望通过将模型链接到GUI类来污染模型。
我搞不懂控制器应该怎么做,它应该提供什么功能?
(这是在C++中实现的,但这无关紧要)
发布于 2009-01-24 04:11:39
GUI“控件”不太适合模型-视图-控制器模式,因为它们通常有自己的内部模型,而不是接受对一个模型的引用。如果控件以这种方式构造,则需要一个适配器类将控件的内部模型“数据绑定”到基础数据模型。
除了适配器类同时扮演视图挂钩组件(从数据模型更新GUI )和控制器(将GUI事件解释为模型操作)的角色之外,这可以实现与模型-视图-控制器类似的功能。
发布于 2009-01-24 00:45:11
Qt为model-view programming提供了一组类。例如,您可以将树视图连接到文件系统模型,但两者都不直接了解对方的任何信息(除了指向视图中模型的指针)。
发布于 2009-01-24 01:00:54
您的要求是:
我不知道您在这里处理的是哪种类型的数据,但分层模型是一件相当简单的事情。我将假定您知道如何迭代分层数据和填充树视图。
您的控制器应该具有用于向模型发送消息的成员函数。参数应该是一个模型元素和您想要发送的消息。这样,UI完全不知道消息是如何到达元素的,但可以让消息通过。
最后一个需求更加棘手,并且依赖于一些东西(例如,控制器的生命周期、应用程序架构等)。我假设控制器的生命周期和树视图一样长。如果是这样,那么您的控制器应该提供一种方法来设置模型更改的回调。然后,当控制器更改模型时,它可以在不知道UI的情况下回调到UI。
https://stackoverflow.com/questions/475218
复制相似问题