2013-07-29 28 views
1

如果我將像素圖設置爲大於該窗口的QGraphicsScene,它將添加滾動條,那麼是否有可能獲得QGraphicsView中顯示的內容?在QGraphicsView中獲取QGraphicsScene的可見區域

在滾動和更改顯示區域時是否還有任何事件發生?

這裏是什麼我談論的屏幕: enter image description here

感謝

回答

9

您可以確定可見區域場景座標如下:

QRect viewport_rect(0, 0, view->viewport()->width(), view->viewport()->height()); 
QRectF visible_scene_rect = view->mapToScene(viewport_rect).boundingRect(); 

您可以使用QGraphicsItem::mapFromScene將場景座標轉換爲項目座標是必要的。

您可以使用view->horizontalScrollBar()view->verticalScrollBar()獲取QScrollBar*對象。連接到valueChanged(int)這些對象的信號來跟蹤滾動。

+0

你肯定的QScrollBar連接?我在編譯時得到了這個結果: 'graphicScene.cpp:30:107(連接)(horizo​​ntalScrollBar(),SIGNAL(valueChanged(int)),((QGraphicsView *)this),SLOT(scrollMoved(int))); :錯誤:調用'GraphicScene :: connect(QScrollBar *,const char [19],QGraphicsView *,const char [18])'' – rednaks

+0

沒有匹配的函數對不起,我忘了包含'QScrollBar' :) – rednaks

1

另外,還要注意視口包含一個函數,爲適應場景的一個區域到視圖,這樣你可以看到所有使用面積: -

void QGraphicsView::fitInView(const QRectF & rect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio) 
+0

錯誤。 'sceneRect'返回在所有滾動條位置的視圖中可以看到的總面積。場景矩形可以大於視口,不依賴於滾動條位置。 –

+0

糟糕,我的錯誤。你說得對,謝謝你指出。我編輯了答案的那一部分。 – TheDarkKnight

相關問題