Как получить точное местоположение с помощью клика на qgraphicsscene в Qt

Я пишу коды для загрузки изображения из файла и внес некоторые изменения в это изображение (изменив значение в некоторых пикселях), увеличив масштаб или уменьшив его, а затем сохранив изображение. Также я хочу узнать местоположение исходного изображения, связанного с кликом по qgraphicsscen. До сих пор я не могу найти какую-либо полезную функцию.

Мои коды для загрузки изображения:

qgraphicsscene = myqgraphicsview->getScene();
qgraphicsscene->setSceneRect(image->rect());
myqgraphicsview->setScene(qgraphicsscene);
qgraphicsscene->addPixmap(QPixmap::fromImage(*image)); // this is the original image

Мои коды для редактирования:

mousePressEvent(QMouseEvent * e){
QPointF pt = mapToScene(e->pos());
scene->addEllipse(pt.x()-1, pt.y()-1, 2.0, 2.0,
QPen(), QBrush(Qt::SolidPattern));}

Я хочу знать связь между e->pos() и точным местоположением в исходном изображении.

1 ответ

Решение

Получение mousePressEvent в GraphicsView означает, что вызов pos() для MouseEvent вернет точку в координатном пространстве представления.

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

С возвращенным элементом координату сцены затем можно сопоставить с локальными координатами элемента, по которому щелкнули с помощью функции mapFromScene элемента.

Итак, в GraphicsView: -

mousePressEvent(QMouseEvent * e)
{
    // get scene coords from the view coord
    QPointF scenePt = mapToScene(e->pos());

    // get the item that was clicked on
    QGraphicsItem item* = qgraphicsscene->itemAt(pt, transform());

    // get the scene pos in the item's local coordinate space
    QPointF localPt = item->mapFromScene(scenePt);
}

С позицией, локальной для элемента с изображением, это всего лишь вопрос сопоставления его масштаба с исходным изображением.

Хотя вы можете сделать это таким образом, другой вариант будет наследовать от класса Qt, в котором хранится изображение, и обрабатывать там mousePressEvent. Это должно предоставить вам координату в локальном пространстве элемента, без необходимости находить элемент на сцене и конвертировать координаты самостоятельно.

Другие вопросы по тегам