如何使用QFileDialog在QGRaphicsView中保存缩放图像

时间:2019-01-15 01:48:01

标签: qt5

我有一个用户界面,

N.1按钮(用于上传图像)

N.2 QGraphicsView(左右)

N.1按钮,显示已加载到QGraphicsView上的当前图像的打印屏幕

使用鼠标可以:

1)放大/缩小图片

2)在图像上绘制矩形。

我想根据我使用的放大或缩小区域拍摄图像的打印屏幕。但是,保存文件后,它会显示带有绘制矩形的整个图像(这是错误的,因为我只需要放大或缩小的部分)(正确)。

根据this post,QFileDialog的使用方式与我尝试的类似。我成功使用QFileDialog::getSaveFileName()保存了图像。但是,这还不能完全解决问题。

在负责处理QGraphicsView中图像打印屏幕的按钮下方,左侧:

void MainWindow::on_addNewRecordBtn_clicked()
{
    leftScene->clearSelection();     // Selections would also render to the file
    leftScene->setSceneRect(leftScene->itemsBoundingRect());    // Re-shrink the scene to it's bounding contents
    QImage image(leftScene->sceneRect().size().toSize(), QImage::Format_ARGB32);  // Create the image with the exact size of the shrunk scene
    image.fill(Qt::transparent);     // Start all pixels transparent
    QPainter painter(&image);
    leftScene->render(&painter);
    image.save(QFileDialog::getSaveFileName(this, tr("New Image Name"), QDir::rootPath(),
                                        "Name (*.jpg *.jpeg *.png *.tiff *.tif)"));
}

预期结果将像这样保存缩放的图像(例如zoom.jpg):

zoomed Particular

但是,当我保存图像(zoom.jpg)时,获得的结果始终是具有绘制特征的整个图像:

entire image

1 个答案:

答案 0 :(得分:0)

因此,如果有人需要,无论放大多少,都可以拍摄图像的打印屏幕。这意味着您可以放大和缩小并拍摄打印屏幕。 以下语句将完成此工作,获取您当前的图像(放大或缩小状态):

QImage image = ui->leftView->grab().toImage();

唯一的故障是水平和垂直滚动条(取决于缩放比例)也会打印在图像中。您可以通过在打印屏幕前立即将其关闭,然后再将其重新打开来避免这种情况。 基本上,我以前的函数可以更好地编写如下:

void MainWindow::on_addNewRecordBtn_clicked()
{
    leftScene->setSceneRect(leftScene->itemsBoundingRect());
    // Setting off the scroll bars
    ui->leftView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->leftView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    QImage image = ui->leftView->grab().toImage();
    image.save(QFileDialog::getSaveFileName(this, tr("New Image Name"), QDir::rootPath(),
                                            "Name (*.jpg *.jpeg *.png *.tiff *.tif)"));
    // Putting the scroll bars back on
    ui->leftView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    ui->leftView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
}

希望这对您遇到同样的问题很有帮助。