如果我將像素圖設置爲大於該窗口的QGraphicsScene
,它將添加滾動條,那麼是否有可能獲得QGraphicsView
中顯示的內容?在QGraphicsView中獲取QGraphicsScene的可見區域
在滾動和更改顯示區域時是否還有任何事件發生?
這裏是什麼我談論的屏幕:
感謝
如果我將像素圖設置爲大於該窗口的QGraphicsScene
,它將添加滾動條,那麼是否有可能獲得QGraphicsView
中顯示的內容?在QGraphicsView中獲取QGraphicsScene的可見區域
在滾動和更改顯示區域時是否還有任何事件發生?
這裏是什麼我談論的屏幕:
感謝
您可以確定可見區域場景座標如下:
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)
這些對象的信號來跟蹤滾動。
另外,還要注意視口包含一個函數,爲適應場景的一個區域到視圖,這樣你可以看到所有使用面積: -
void QGraphicsView::fitInView(const QRectF & rect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio)
錯誤。 'sceneRect'返回在所有滾動條位置的視圖中可以看到的總面積。場景矩形可以大於視口,不依賴於滾動條位置。 –
糟糕,我的錯誤。你說得對,謝謝你指出。我編輯了答案的那一部分。 – TheDarkKnight
你肯定的QScrollBar連接?我在編譯時得到了這個結果: 'graphicScene.cpp:30:107(連接)(horizontalScrollBar(),SIGNAL(valueChanged(int)),((QGraphicsView *)this),SLOT(scrollMoved(int))); :錯誤:調用'GraphicScene :: connect(QScrollBar *,const char [19],QGraphicsView *,const char [18])'' – rednaks
沒有匹配的函數對不起,我忘了包含'QScrollBar' :) – rednaks