모두이 문제를 해결하는 좋은 방법을 결정하는 데 문제가 있습니다. 데이터 모델은 MyData
입니다. 내 데이터를 QObject
으로 모델링 했으므로 신호와 슬롯이 있습니다.두 가지 다른보기를 가진 Qt 데이터 모델
모델의 데이터를 수정하려면 해당 슬롯에 연결하거나 슬롯을 직접 호출 할 수 있습니다. 수정이 발생하면 모델은 데이터가 변경되었음을 알립니다. 예를 들면 : 나는 점을 목록에 QAbstractItemModel
를 사용하는 QListView
이 QGraphicsEllipseItem
QGraphicsView
이
- :
지금 내 의견은 두 개의 별도 것들입니다.class MyData : public QObject { ... public slots: void AddPoint(QPointF); signals: void AddedPoint(QPointF); }; void MyData::AddPoint(QPointF p) { //added the point emit AddedPoint(p); }
신호와 슬롯을 사용하여이 두 그래픽 뷰를 동기화합니다 (QObject에서 상속하기 위해 QGraphicsItem을 하위 클래스로 사용합니다).
질문
: 테이블을 변경하는, 그 회전 신호를 QGraphicsViewAddedPoint
에 접속된다 MyData
를 신호. 그러나, MyData::AddedPoint
도 테이블에 연결되므로 동기화를 시도 할 때 두 개의 동일한 점이 추가됩니다. 누구든지 진행 방법에 대한 조언을 해 줄 수 있습니까?
내 생각과 아이디어 지금까지 :
- 나는 지점이 존재하는지 확인하고, 반복을 방지 할 수있다. 삽입 작업에 효과적이며 삭제 및 업데이트에 적합하지 않습니다.
- 가장 좋은 접근 방법은 다음과 같습니다.
MyData
슬롯에서 보낸 사람()을 잠시 차단하고 차단을 해제하십시오.
편집 :MyData
정말 "컨트롤러/인터페이스"클래스, 실제 모델은 OpenCV의 유형을 사용하고, 따라서 나는 그것이 Qt는 아키텍처에서 분리 유지하고 싶습니다.
Qt 프록시 모델을 보았습니까? – hyde