2011-01-14 110 views
6

我想擁有一個從不自動滾動的QGraphicsView。QGraphicsView:禁用自動滾動

相似:基本上,我的問題與http://developer.qt.nokia.com/forums/viewthread/2220完全相同,但該線程沒有收到答案。

我迄今爲止嘗試:

  • 在showEvent()和resizeEvent(),我做的用戶界面 - > graphicsView-> fitInView(...),其中長細如項目不適用衝過屏幕矩形
  • 我還試圖操縱視圖變換,但除了縮放它的係數永遠不會改變,所以這是無果而終,太
  • Diabling滾動條的外觀並沒有幫助,也

另請參閱http://doc.qt.io/qt-4.8/qgraphicsview.html

回答

3

我找到了一個解決方案(不要猶豫,發佈您的替代品:)),我仍然認爲這個答案可能會有幫助,因爲我在谷歌和文檔上掙扎了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()) 

,自動滾動行爲停止。