我正在开发一个地图应用程序,需要使用表格,表格和地图中的图形对象来显示数据对象。我正在使用PyQt,但这并不重要,因为这是一个Qt问题而不是Python问题。
如果我只需要表格和表格视图,这很容易,我只使用Qt模型/视图框架。但是我需要map视图来提供只有使用Graphics View框架才真正可用的功能,它实际上是它自己的Model / View框架,QGraphicsScene充当数据模型。
我可以想到两种方法来做到这一点。一种是从QAbstractItemModel子类化的权威模型开始,将其链接到QAbstractItemView的子类,并从那里生成并更新场景中的QGraphicsItems。这看起来很丑陋,因为我不知道如何通过与QGraphicsItems的交互来处理用户与数据项的交互和更改。
我能想到的另一种方法是将QGraphicsScene视为权威数据源,将数据对象存储在每个QGraphicsItem的.data()属性中。然后,我将QAbstractItemModel子类化并编写它,以便它在数据存储中访问场景中的数据,然后其他视图将其用作模型。我如何将更改传播到场景中的数据直到模型?
无论采用哪种方法,看起来框架都没有处理差距。在模型/视图中,假设所有更改都在模型中进行。在图形视图中,假定所有更改都在场景中进行。
那么您选择哪种方法QAbstractItemModel(权威) - > QAbstractItemView-> QGraphicsScene或QGraphicsScene(权威) - > QAbstractItemModel->其他视图。你为什么选择一个而不是另一个?你有什么期望?有没有其他人需要弥合Qt的双模型/视图框架之间的差距,你是怎么做到的?
答案 0 :(得分:11)
毫无疑问。我以前做过这个,它确实需要一些重复(至少有些是我无法避免的),但没什么不好。化QAbstractItemModel(权威) - > QAbstractItemView-> QGraphicsScene
这也允许您在标准视图中表示您的数据以及相当不错的场景。
我最好的建议是在您创建的QHash
中存储QPersistantModelIndex
QGraphicsItem
QGraphicsScene
到QAbstractItemView
和QModelIndex
。这使您可以快速进入模型/视图范围(QGraphicsItem
)到图形视图范围({{3}})