Domanda

Nella mia domanda ho QGraphicsScene con pixmap aggiunto e tutto viene visto in QGraphicsView con barre di scorrimento off. La finestra del programma è più piccolo pixmap e quando si preme i tasti freccia o spostare la rotella del mouse viene spostato pixmap.

Come faccio a disattivare che quindi, anche se la pixmap è più grande di finestra non verrà spostato da tastiera o il mouse a meno che io uso il mio eventi per questo?

(ho cercato di impostare la proprietà interattivo su false, ma che non ha funzionato)

È stato utile?

Soluzione

Credo che la soluzione più semplice sarebbe quella di impostare FocusPolicy di QGraphicsView di Non in primo piano e poi elaborare tutti gli eventi chiave della finestra principale.

ui->graphicsView->setFocusPolicy( Qt::NoFocus );

Altri suggerimenti

Credo che il modo più semplice è quello di utilizzare QGraphicsView::setSceneRect() per impostare l'area che la vista è permesso di visualizzare.

Se si imposta sceneRect() della vista per la dimensione effettiva del widget vista (o solo leggermente più piccolo), allora non sarà in grado di scorrere o padella al di fuori di questo rettangolo.

Non so se c'è un modo più semplice, ma il modo moderatamente facile sarebbe quella di fare una classe che eredita la classe QGraphicsView, e sostituisce il mouse e gli eventi di pressione dei tasti.

Il modo più duro comporterebbe l'installazione di un filtro eventi sul widget.

A mio avviso, la soluzione più difficile forza bruta potrebbe essere quella di rilevare il cambiamento attraverso una sorta di segnale, e riportarlo a come era.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top