【发布时间】:2012-11-02 17:58:26
【问题描述】:
所有,我无法确定处理此问题的好方法。我有一个数据模型,我们称之为MyData。我已将我的数据建模为 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,它使用QAbstractItemModel列出积分。
我使用信号和槽同步这两个图形视图(我将 QGraphicsItem 子类化为从 QObject 继承)。
问题:当表格进行更改时,它会向MyData 发出信号,而AddedPoint 又会向连接到QGraphicsView 的AddedPoint 发出信号。 但是,MyData::AddedPoint 也连接到表,因此在尝试同步时会添加两个相同的点。任何人都可以提供有关如何进行的任何建议吗?
到目前为止我的想法和想法:
- 我可以检查该点是否存在,并防止重复。非常适合插入,但不适合删除和更新。
-
我认为最好的方法是:在
MyData插槽中,阻止 sender() 一秒钟,然后取消阻止。
编辑:MyData 确实是一个“控制器/接口”类,真实模型使用 OpenCV 类型,因此我希望将其与 Qt 架构分开。
【问题讨论】:
-
你看过 Qt 代理模型吗?