Get visible rectangle of QGraphicsView?
c++, qgraphicsview, qt
Solution
Nevermind. Came up with this, which seems to work.
QRectF EditorView::visibleRect() {
QPointF tl(horizontalScrollBar()->value(), verticalScrollBar()->value());
QPointF br = tl + viewport()->rect().bottomRight();
QMatrix mat = matrix().inverted();
return mat.mapRect(QRectF(tl,br));
}
Problem
I've been pulling my hair out with this one for hours. There's a thread here about it, but nothing seems to be working. QGraphicsView::rect() will return the width and height, but the `left` and `top` values aren't set properly (always 0 -- ignoring the scrolled amount). I want it in scene coordinates, but it should be easy enough to translate from any system. I have no idea what `horizontalScrollBar()->value()` and vert are returning...seems to be meaningless jibberish. @fabrizioM: ``` // created here void EditorWindow::createScene() { m_scene = new EditorScene(this); m_view = new EditorView(m_scene); setCentralWidget(m_view); connect(m_scene, SIGNAL(mousePosChanged(QPointF)), this, SLOT(mousePosChanged(QPointF))); } /// with this constructor EditorView::EditorView(QGraphicsScene* scene, QWidget* parent) : QGraphicsView(scene, parent) { setRenderHint(QPainter::Antialiasing); setCacheMode(QGraphicsView::CacheBackground); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); setDragMode(QGraphicsView::NoDrag); scale(1.0, -1.0); // flip coordinate system so that y increases upwards fitInView(-5, -5, 10, 10, Qt::KeepAspectRatio); setInteractive(true); setBackgroundBrush(QBrush(QColor(232,232,232), Qt::DiagCrossPattern)); } ```