总而言之,我无法确定处理此问题的好方法。我有一个数据模型,我们称之为MyData
. 我已将我的数据建模为 a QObject
,因此它具有信号和插槽。
要修改模型中的任何数据,您可以连接到其插槽,也可以直接调用插槽。当该修改发生时,模型会发出信号表明其数据已更改。例如:
class MyData : public QObject
{
...
public slots:
void AddPoint(QPointF);
signals:
void AddedPoint(QPointF);
};
void MyData::AddPoint(QPointF p)
{
//added the point
emit AddedPoint(p);
}
现在我的观点是两件不同的事情:
- 我有一个
QGraphicsView
代表使用点的QGraphicsEllipseItem
- 我有一个
QListView
使用 aQAbstractItemModel
列出点的。
我使用信号和槽同步这两个图形视图(我将 QGraphicsItem 子类化为从 QObject 继承)。
问题:当一个表进行更改时,它会发出信号MyData
,而后者又会发出信号AddedPoint
连接到 QGraphicsView。 但是,MyData::AddedPoint
也连接到表,因此在尝试同步时会添加两个相同的点。任何人都可以就如何进行提供任何建议吗?
到目前为止我的想法和想法:
- 我可以检查该点是否存在,并防止重复。非常适合插入,但不适合删除和更新。
- 我认为最好的方法是:在
MyData
插槽中,将 sender() 阻塞一秒钟,然后解除阻塞。
编辑: MyData
实际上是一个“控制器/接口”类,真实模型使用 OpenCV 类型,因此我想让它与 Qt 架构分开。