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は同じ座標系を共有していると思いますよね?このため、画像を次のように更新します。
今、私はeffjaeの提案を受け入れます。ViewにeventFilterをインストールしましたが、mouseClickの座標はView & Sceneに基づいています。ありがとうございました。