【发布时间】:2019-11-08 03:12:23
【问题描述】:
我正在尝试设计一个多视图应用程序以使用 Qt 的模型/视图框架,以便我可以将大量复杂逻辑从我的 QGraphicsItem 类中移出。
如下图所示,应用程序由两个(或多个)视图组成,每个视图都包含相同系列的红色垂直引导线A1、B1、C1 ... 在相同的水平位置沿着每个视图。
我想确保当用户在一个视图中拖动引导线时,例如从点A1到A_1',如上图所示,其他视图中所有对应的引导线都移动相同距离和同一方向,例如从A2 到A2'。此外,不应将一条引导线拖过另一条引导线,即引导线必须保持其相对顺序。这是我想从 GuideLine 类移到模型中的部分逻辑。
我知道拖动引导线会触发QGraphicsItem::itemChange,如下面的sn-p所示。我不知道怎么做最好
- 将候选值转发到模型进行验证(和存储)。我知道视图是接口“通过信号和插槽机制与模型互操作的标准接口”。在我看来,最大的问题是
QGraphicsItem::itemChange必须立即返回验证值,它不能依赖异步信号槽机制。 - 在不触发创建级联通知的情况下通知其他视图中的指南更改,例如
A1和B1无休止地相互通知。
-
class GuideLine( QtGui.QGraphicsLineItem ):
...
# Called when item is about to change to value
def itemChange( self , change , value ):
# TODO
# 1. validate value in model
# 2. if change is valid notify peers in other views
pass
【问题讨论】:
标签: pyside qgraphicsitem model-view