Получение видимой области QGraphicsScene в QGraphicsView

Если я установлю растровое изображение на QGraphicsScene, которое больше окна, оно добавит полосы прокрутки. Так можно ли получить то, что отображается в QGraphicsView?

Также возникает ли какое-либо событие при прокрутке и изменении отображаемой области?

Вот скрин того, о чем я говорю: введите здесь описание изображения

Спасибо


person rednaks    schedule 29.07.2013    source источник


Ответы (2)


Определить видимую область в координатах сцены можно следующим образом:

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) этих объектов, чтобы отслеживать прокрутку.

person Pavel Strakhov    schedule 29.07.2013
comment
Вы уверены в соединениях QScrollBar? Я получил это во время компиляции: connect(horizontalScrollBar(), SIGNAL(valueChanged(int)), ((QGraphicsView*)this), SLOT(scrollMoved(int))); graphicScene.cpp:30:107: error: no matching function for call to ‘GraphicScene::connect(QScrollBar*, const char [19], QGraphicsView*, const char [18])’ - person rednaks; 29.07.2013
comment
Извините, я забыл включить QScrollBar :) - person rednaks; 30.07.2013
comment
Чувак, большое спасибо, ты сэкономил мне несколько часов: D, я пробовал массу разных решений. - person retinotop; 06.02.2019

Кроме того, обратите внимание, что окно просмотра содержит функцию для размещения области сцены в представлении, чтобы вы могли видеть всю эту область, используя: -

void QGraphicsView::fitInView(const QRectF & rect, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio)
person TheDarkKnight    schedule 29.07.2013
comment
Неправильно. sceneRect возвращает общую площадь, которая может быть видна в представлении на всех позициях полосы прокрутки. Прямоугольник сцены может быть больше области просмотра и не зависит от положения полосы прокрутки. - person Pavel Strakhov; 29.07.2013
comment
Упс, моя ошибка. Вы правы, спасибо, что указали на это. Я отредактировал эту часть ответа. - person TheDarkKnight; 29.07.2013