【问题标题】:Two views, one model : How to update the views when the model changes两个视图,一个模型:模型更改时如何更新视图
【发布时间】:2013-04-24 11:36:08
【问题描述】:

我正在设计一个 Qt UI,并且对于同一模型(汽车)有两个不同的视图(QGraphicsObject 类)。

当要更新汽车模型时(在两个小部件之一中),我希望更新两个视图(当然模型也是如此)。

执行此操作的直观方法是更新模型,并在发生这种情况时让视图捕捉到“信号”或类似的东西来更新自己。

我想知道这是否是推荐的行为(在 MVC 中),因为它强制模型与其视图有一些双向连接(而在 MVC 中,模型不应该有它的视图列表)。

另外,在 Qt 中实现这一点的好方法是什么? (使用 Qt 信号?在模型更改时升旗?)

【问题讨论】:

    标签: qt model-view-controller user-interface


    【解决方案1】:

    你的模型会是什么样子?在 Qt 中,有一个用于类似列表、类似表格和类似树的模型的标准 API,model-view programming。但是,它与您显然正在使用的QGraphicsScene 并不能很好地配合。你还没有说你想用什么来交流,或者你建模的数据是如何结构化的,所以很难建议你在这里应该做什么。

    也就是说,通常的 MVC 模式(数学化 Qt 中使用的 QAbstractItemModel API)是让模型通知任何附加视图有关基础数据的任何更改;在 Qt 中,这是通过视图连接的信号来完成的。当视图想要修改数据时,它们会调用模型上的方法。当模型接受修改时,它会发出标准信号,以便之后更新所有视图。

    【讨论】:

    • 但是我如何明确地将模型“连接”到 Qt 中的视图?我实际上只是认为我的模型是我的视图的属性(自定义 QGraphicsObject )?
    • QAbstractItemModels 可以通过 setModel() 连接到 QAbstractItemView 子类。但是,这是特定于表/树/列表的。如果您的数据较少,而您想要监视几个状态变量(而不是列表等),则模型包装器 QObject 保存状态并在更改时发送信号可能更适合。没有模式可以捕捉所有用例,这取决于您的模型类型。
    猜你喜欢
    • 2011-08-09
    • 2018-06-30
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    相关资源
    最近更新 更多