Using QRubberBand to crop image in Qt

半腔热情 提交于 2019-12-01 09:50:15

There are two issues here - the position of the rect relative to the image and the fact that the image is (potentially) scaled in the label.

Position issue:

QRect myRect(myPoint, event->pos());

You should perhaps change this to:

QPoint a = mapToGlobal(myPoint);
QPoint b = event->globalPos();

a = ui->imageLabel->mapFromGlobal(a);
b = ui->imageLabel->mapFromGlobal(b);

Then, the label may be scaling the image because you used setScaledContents(). So you need to work out the actual coordinates on the unscaled image. Something like this maybe (untested/compiled):

QPixmap OriginalPix(*ui->imageLabel->pixmap());
double sx = ui->imageLabel->rect().width();
double sy = ui->imageLabel->rect().height();
sx = OriginalPix.width() / sx;
sy = OriginalPix.height() / sy;
a.x = int(a.x * sx);
b.x = int(b.x * sx);
a.y = int(a.y * sy);
b.y = int(b.y * sy);

QRect myRect(a, b);
...
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!