Pergunta

Eu tenho um aplicativo que exibe um editor para um diagrama usando QGraphicsScene objeto. Eu gostaria de criar uma leitura única versão do mesmo diálogo, mas tem capacidade para o usuário para ver os dois ao mesmo tempo.

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);

Quando eu criar 2 casos de QGraphicsScene e uso addItem na segunda ele remove todos os itens da primeira. Does Qt apoiar qualquer tipo de partilha de modelo entre as cenas? É a minha única escolha para ter mesma cena e tentar personalizar a vista? Mais tarde, a pessoa não parecem funcionar porque a informação de seleção de objeto está dentro dos itens gráficos a ser partilhada por isso, se eu desabilitar bandeiras sobre eles tornam-se apenas de leitura em ambos os pontos de vista. Qualquer conselho é apreciado. Obrigado.

Foi útil?

Solução

Eu acho que você está armazenando QSceneItems em classes de modelo. Por causa disso pScene1 e pScene2 está tentando compartilhar não só o modelo em si, mas também os itens de cena. Isso não vai funcionar, porque qualquer item cena podem ser colocados apenas em uma cena a qualquer momento .

Como corrigir isso? modelo de composição não tem conhecimento de qualquer GUI. Deixe-o emitem alterado () notificações sempre algo interessante acontece.

Então deixe cada modelo envoltório SimScene em quaisquer QSceneItems que quer, eo processo mudou () notificações.

Exemplo:

Modelo: Gráfico, Beira, Vertex
GUI SimScene, QEdge, QVertex, QSimInfo, Qbackground, e assim por diante ...

Outras dicas

Se você quer apenas um interativo e uma vista só de leitura em seu modelo que você pode usar um único QGraphicsScene e 2 QGraphicsViews. Você apenas tem que chamar QGraphicsView :: setInteractive (false) em um deles. Dessa forma, você não tem que alterar quaisquer bandeiras item.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top