【发布时间】:2019-02-28 21:28:20
【问题描述】:
我希望能够使用QRubberBand来选择图像的一个区域,然后在裁剪后将新选择的区域保存在新的地方。
我找到了这个answer,但我需要知道mapFormGlobal(a) 或(b) 中的a 和b 是什么
void MainResizeWindow::mousePressEvent(QMouseEvent *event)
{
if(ui->imageLabel->underMouse()){
myPoint = event->pos();
rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
rubberBand->show();
}
}
void MainResizeWindow::mouseMoveEvent(QMouseEvent *event)
{
rubberBand->setGeometry(QRect(myPoint, event->pos()).normalized());
}
void MainResizeWindow::mouseReleaseEvent(QMouseEvent *event)
{
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;
QPoint a = mapToGlobal(myPoint);
QPoint b = event->globalPos();
a = ui->imageLabel->mapFromGlobal(a);
b = ui->imageLabel->mapFromGlobal(b);
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);
// QPixmap OriginalPix(*ui->imageLabel->pixmap());
QImage newImage;
newImage = OriginalPix.toImage();
QImage copyImage;
copyImage = copyImage.copy(myRect);
ui->imageLabel->setPixmap(QPixmap::fromImage(copyImage));
ui->imageLabel->repaint();
}
我得到错误
error: 'a' was not declared in this scope
a = ui->imageLabel->mapFromGlobal(a);
^
应该在mainresizewindow.h声明的地方或者正确的方式是什么
【问题讨论】:
-
在您链接的答案中,
a和b声明在您发布的两行上方 -
但是当我运行代码时,我发现错误'a'没有在这个范围内声明 a = ui->imageLabel->mapFromGlobal(a);
-
你是否也复制了
QPoint a = mapToGlobal(myPoint); QPoint b = event->globalPos();这两行? -
确定我说的。我用所有代码编辑问题
-
这没有意义。在此之前您是否收到其他错误,例如
QPointundeclared?
标签: qt