У меня QGraphicsView содержит QGraphicsScene, который загружает изображение. Что делает мое приложение, так это позволяет пользователю аннотировать это изображение, чтобы я мог получить информацию о координатах области аннотации пользователя этого изображения. Для большей наглядности сделаю вот такую картинку:
Мне нужна точная информация о координатах, основанная на координате изображения, поскольку я добавляю растровое изображение в сцену, я думаю, что изображение и сцена имеют одну и ту же систему координат. Но QGraphicsView и сцена имеют разные координаты, как показано на рисунке, и на моем компьютере они различаются на 5 пикселей по ширине и 1 пиксель по высоте (всегда ли это?).
Я использую функцию mapToScene, но не получаю правильная информация о координатах.
Я размещаю здесь код.
scene = new QGraphicsScene();
scene->addPixmap (pixmapItem);
ui->graphicsView->setScene (scene);
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if ((event->button() == Qt::LeftButton)&& beginAnnotation) {
.......
QPointF mousePoint = ui->graphicsView->mapToScene(event->pos());
qDebug() << mousePoint;
}
}
Когда я щелкаю верхний левый угол изображения, я надеюсь, что смогу получить (0,0), но вместо этого я получаю (5,1).
Помогите, пожалуйста.
РЕШЕНИЕ:
Я думаю, что @effjae права. Мой mainWindow захватывает mousrPressEvent. И когда я загружаю изображение в сцену, содержащуюся в View, я использую ui->graphicsView->adjustSize();
. Итак, я думаю, что View и Scene используют одну и ту же систему координат, я прав? По этой причине я обновляю картинку так:
Теперь я принимаю предложение Эффджэ. Я устанавливаю eventFilter в View, и теперь координата mouseClick основана на View и Scene. Спасибо.