我有一个用户界面,
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):
但是,当我保存图像(zoom.jpg)时,获得的结果始终是具有绘制特征的整个图像:
答案 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);
}
希望这对您遇到同样的问题很有帮助。