2011-01-14 34 views
6

Voglio avere un QGraphicsView che non scorre mai automaticamente.QGraphicsView: disabilita lo scorrimento automatico

Simile: Fondamentalmente, la mia domanda è identica a http://developer.qt.nokia.com/forums/viewthread/2220, ma quella discussione non ha ricevuto risposta.

Quello che ho provato finora:

  • Entro ShowEvent() e resizeEvent(), devo fare UI-> graphicsView-> fitInView (...), che funziona bene finché gli elementi non lo fanno superamento della schermata rettangolo
  • ho anche provato manipolare la vista trasformare, ma a parte il ridimensionamento è coefficienti non cambiano mai, quindi questo è stato inutile, troppo
  • la disattivazione del barra di scorrimento aspetto non aiuta, troppo

Vedi anche http://doc.qt.io/qt-4.8/qgraphicsview.html.

risposta

3

Ho trovato una soluzione (non esitate a postare le vostre alternative :)), tuttavia ho pensato che questa risposta potrebbe essere utile in quanto ho faticato su google e documentazione per circa 15 ore.

La chiave è non solo chiamare fitInView(), ma anche setSceneRect(). Questo ha fatto per me (sostituire FooBar con il proprio nome di classe):

void FooBar::resizeEvent(QResizeEvent *) { 
     fitView(); 
} 

void FooBar::showEvent(QShowEvent *) { 
     fitView(); 
} 

void FooBar::fitView() { 
     const QRectF rect = QRectF(-0.5,-0.5, 1, 1); 
     ui->graphicsView->fitInView(rect, 
            Qt::KeepAspectRatio); 
     ui->graphicsView->setSceneRect(rect); 
} 
7

La mia soluzione è un po 'anonima, ma penso che sia abbastanza intuitivo: Se non si desidera che il QGraphicsView per scorrere mai la vostra roba, override il metodo virtuale scrollContentsBy.

void QGraphicsViewDerived::scrollContentsBy(int, int) 
{ 
    //don't do anything hah! 
} 
0

Un'altra soluzione semplice, se non è necessaria alcuna interattività, è quello di disattivare la QGraphicsView:

view->setEnabled(false); 

Questo sarà anche evitare che lo scorrimento, tuttavia, inoltre, non riceverà più gli eventi del mouse o della tastiera .

1

view->setDragMode(QGraphicsView::NoDrag); ha fatto il trucco per me.

Anche la soluzione di anonvt ha funzionato, tranne che interferiva con il rinfresco della scena.

1

ho trovato la soluzione perfetta, chiamando

QGraphicsView::setSceneRect(yourScene->sceneRect()) 

nel costruttore della vista, viene arrestato il comportamento di scorrimento automatico.

Problemi correlati