QT의 두 Qgraphicscene 인스턴스에서 동일한 모델을 공유합니다

StackOverflow https://stackoverflow.com/questions/1120129

  •  13-09-2019
  •  | 
  •  

문제

qgraphicsscene 객체를 사용하여 다이어그램의 편집기를 표시하는 응용 프로그램이 있습니다. 동일한 대화 상자의 읽기 전용 버전을 만들고 싶지만 사용자가 동시에 볼 수있는 기능이 있습니다.

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 개의 인스턴스를 생성하고 두 번째 인스턴스를 두 번째 인스턴스에서 사용하면 첫 번째 항목에서 모든 항목을 제거합니다. QT는 장면간에 모델을 공유하는 것을 지원합니까? 동일한 장면을 가지고보기를 사용자 정의하려는 유일한 선택입니까? 객체 선택 정보가 공유되는 그래픽 항목 내에 있기 때문에 나중에는 작동하지 않는 것 같습니다. 따라서 플래그를 비활성화하면 두 뷰에서만 읽히게됩니다. 모든 조언에 감사드립니다. 감사.

도움이 되었습니까?

해결책

모델 클래스에 Qsceneitems를 저장하고 있다고 생각합니다. PSCENE1과 PSCENE2는 모델 자체뿐만 아니라 장면 항목을 공유하려고합니다. 장면 항목이므로 작동하지 않습니다 주어진 순간에 한 장면에만 배치 할 수 있습니다..

그것을 고치는 방법? GUI를 인식하지 못하는 모델을 만드십시오. 흥미로운 일이 발생할 때마다 변경 () 알림을 발행하십시오.

그런 다음 각 SIMSCENE 랩 모델을 원하는 QSCENEITEMS로 만들고 프로세스 변경 () 알림을 처리하십시오.

예시:

모델: 그래프, 에지, 정점
구이Simscene, Qedge, Qvertex, Qsiminfo, Qbackground 등 ...

다른 팁

모델에서 대화식 및 읽기 전용보기 만 원한다면 단일 QGRAPHICSSCENE 및 2 QGRAPHICSVIEWS를 사용할 수 있습니다. 그 중 하나에서 qgraphicsview :: setinteractive (false)를 호출해야합니다. 그렇게하면 항목 플래그를 변경할 필요가 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top