выяснение, какая часть QGraphicsItem видна в QGraphicsView - PullRequest
3 голосов
/ 22 января 2011

Я пытаюсь выяснить, как сделать отображение между пикселями, которые я могу видеть в настоящее время в QGraphicsView, и фактическим пикселем в изображении, которое является QGraphicsItem.

Например, если мой зритель имеет размер 50x50и мое изображение составляет 100x100, затем, когда изображение загружается и остается нетронутым, 0,0 пикселя изображения соответствует 0,0 пикселя зрителя.

Теперь, если я перетаскиваю изображение вправо10 пикселей, это верхний левый 0,0 пиксель изображения, теперь в (10,0), и я могу видеть только столбцы 10-40 исходного изображения.

Кроме того, если масштабировать, чтобы уменьшить масштаб изображения, чтобы уменьшить изображение по сравнению с областью QGraphicsView, возможно, 0,0 изображения отображается на 10,0 зрителя, но 100 100 изображения могут отображаться только на40,40 в средстве просмотра, потому что я масштабировал его так мало.

Я знаю, что для QGraphicsItem есть много функций отображения, но я просто не уверен, как определить, какие части видны, и каксделать это сопоставление между Предметом, Сценой и Видом.

Спасибо за любую помощь

Для справки ... пока, что я пробовал: Получить форму элемента сопоставить фигуру сСцена, которая из сцены, используя вид, получает ограничивающий прямоугольник пути и находит верхний левый угол этого

Завершается, используя что-то вроде следующего:

    QRect portRect = ui->graphicsView->viewport()->rect();
    QRectF sceneRect = ui->graphicsView->mapToScene(portRect).boundingRect();
    QRectF itemRect = item->mapRectFromScene(sceneRect);

    QRectF isec = itemRect.intersected(item->boundingRect());

Спасибо Стивену Чу

1 Ответ

2 голосов
/ 22 января 2011
QRect portRect = yourGraphicsView->viewPort()->rect();
QRectF sceneRect = yourGraphicsView->mapToScene(portRect);
QRectF itemRect = yourItem->mapRectFromScene(sceneRect);

Возможно, вы захотите сделать пересечение результирующего прямоугольника с фактическим прямоугольником вашего элемента, поскольку область просмотра может быть больше, чем элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...