代码之家  ›  专栏  ›  技术社区  ›  Simon Hibbs

如何将Qt模型/视图框架与图形视图框架结合使用

  •  15
  • Simon Hibbs  · 技术社区  · 16 年前

    我正在开发一个映射应用程序,需要使用表、窗体和图形对象在地图中显示数据对象。我使用的是PyQt,但这并不重要,因为这是Qt问题而不是Python问题。

    我可以想出两种方法。一种是从qabstractemodel的一个子类开始,将其链接到qabstractemview的一个子类,然后在场景中生成和更新QGraphicsItems。这看起来很难看,因为我不知道如何通过与QGraphicsItems的交互来处理用户与数据项的交互和更改。

    另一种方法是将qgraphicscene视为权威数据源,将数据对象存储在每个QGraphicsItem的.data()属性中。然后我将qabstractemmodel子类化并编写它,这样它就可以访问场景中的数据作为它的数据存储,其他视图就可以使用它作为它们的模型。如何将场景中的数据更改传播到模型?

    无论我采用哪种方法,似乎都存在框架无法处理的差距。在模型/视图中,假设所有更改都在模型中进行。在图形视图中,所有更改都假定在场景中进行。

    那么您会选择哪种方法qabstractemmodel(权威)—>QAbstractItemView->Qgraphicscene或Qgraphicscene(权威)—>qAbstracteModel->其他观点。你为什么要选择一个而不是另一个?你预期会有什么问题?有没有其他人需要在Qt的双模型/视图框架之间架起一座桥梁?您是如何做到的?

    1 回复  |  直到 16 年前
        1
  •  13
  •   Adam W    16 年前

    QAbstracteModel(权威)—>QAbstractItemView->QS基因

    我最好的建议是储存一个 QHash 属于 QPersistantModelIndex QGraphicsItem QGraphicsScene QAbstractItemView QModelIndex )图形视图土地( QGraphicsItem公司 )