2009-07-13 5 views
1

QGraphicsScene 개체를 사용하여 다이어그램 편집기를 표시하는 응용 프로그램이 있습니다. 동일한 대화 상자의 읽기 전용 버전을 만들고 싶지만 사용자가 동시에이 두 가지를 볼 수있는 기능이 있어야합니다.Qt의 두 QGraphicScene 인스턴스에서 동일한 모델 공유

SimScene* pScene1 = new SimScene(model); // adds model to scene 
SimScene* pScene2 = new SimScene(model); // adds model to scene 
QGraphicsView* pView1 = new QGraphicsView(); 
pView1->setScene(pScene2); 
QGraphicsView* pView1 = new QGraphicsView(); 
pView2->setScene(pScene2); 

QGraphicsScene 인스턴스를 2 개 만들고 두 번째 인스턴스에서 addItem을 사용하면 첫 번째 인스턴스에서 모든 항목이 제거됩니다. Qt는 장면 사이에서 어떤 종류의 모델 공유를 지원합니까? 같은 장면을 가지고보기를 사용자 정의하려고하는 유일한 방법입니까? 나중에 하나의 객체 선택 정보가 공유되는 그래픽 항목 내에 있기 때문에 작동하지 않는 것 같습니다. 그래서 플래그를 비활성화하면 두보기 모두에서 읽기만됩니다. 모든 조언을 부탁드립니다. 감사.

답변

0

QSceneItems을 모델 클래스에 저장한다고 생각합니다. 그 때문에 pScene1과 pScene2는 모델 자체뿐만 아니라 장면 항목을 공유하려고합니다. 장면 항목이 모두 can be placed only on one scene at any given moment이므로이 기능이 작동하지 않습니다.

문제를 해결하는 방법은 무엇입니까? 모델이 GUI를 인식하지 못하게하십시오. 재미있는 일이 발생할 때마다 changed() 알림을 보냅니다.

그런 다음 각 SimScene 랩 모델을 원하는 QSceneItem으로 놓고 changed() 알림을 처리합니다.

예 :

모델 : 그래프, 에지, 정점
GUI SimScene, QEdge, QVertex, QSimInfo, Qbackground, 등등 ...

+0

당신 말이 맞습니다. 기존 시스템은 GUI 항목으로 모델 항목을 가지고 있기 때문에 두 번째 추가시 첫 번째 장면에서 제거됩니다. 나는 그들을 분리하려고 노력할 것이다. 감사. –

1

모델에 대화 형보기 및 읽기 전용보기가 필요한 경우 하나의 QGraphicsScene과 2 개의 QGraphicsView를 사용할 수 있습니다. 그 중 하나에서 QGraphicsView :: setInteractive (false)를 호출하면됩니다. 그렇게하면 아이템 플래그를 변경할 필요가 없습니다.

관련 문제