2011-01-14 2 views
6

Я хочу иметь QGraphicsView, который никогда не прокручивается автоматически.QGraphicsView: отключить автоматическую прокрутку

Похоже: В принципе, мой вопрос идентичен http://developer.qt.nokia.com/forums/viewthread/2220, но эта нить не получила ответа.

То, что я пытался до сих пор:

  • В showEvent() и resizeEvent(), я ui-> graphicsView-> fitInView (...), который прекрасно работает до тех пор, пока товар не пересолить экрана прямоугольную
  • Я также пытался манипулировать вид преобразования, но кроме масштабирования он никогда коэффициенты не изменяются, так что это было бесплодными, тоже
  • Diabling полоса прокрутки внешний вид не помогает, слишком

См. Также http://doc.qt.io/qt-4.8/qgraphicsview.html.

ответ

3

Я нашел решение (не стесняйтесь публиковать свои альтернативы :)), все же я думал, что этот ответ может быть полезным, поскольку я боролся с Google и документацией в течение 15 часов.

Ключ должен не только вызывать fitInView(), но и setSceneRect(). Это сделало это для меня (заменить FooBar с вашим собственным именем класса):

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

Моим решения немного схематично, но я думаю, что это довольно интуитивно: Если вы не хотите, чтобы QGraphicsView когда-либо прокручивать ваши вещи, переопределение виртуальный метод scrollContentsBy.

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

Другое простое решение, если нет интерактивности не требуется, чтобы отключить QGraphicsView:

view->setEnabled(false); 

Это также предотвратить его прокрутки, однако он также не будет получать события мыши или клавиатуры больше ,

1

view->setDragMode(QGraphicsView::NoDrag); сделал трюк для меня.

Решение от anonvt также работало, за исключением того, что оно мешало освещению сцены.

1

я нашел идеальное решение, позвонив по телефону

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

в конструкторе вашей точки зрения, автоматический режим прокрутки останавливается.

Смежные вопросы