首页 > 解决方案 > 如何在 Qt 中保存图像而无需手动添加 .jpeg 或 .png 扩展名?

问题描述

我想将图像保存到光盘,用户可以选择将其保存为 .png 或 .jpeg。如果我将图像名称设置为 img.jpeg,则当 FileDialog 弹出时,它可以工作,但如果我将其设置为 img,它不会保存它。我该如何解决?

QImage image;
    QString imagePath = QFileDialog::getSaveFileName( this,tr("Save File"),"", tr("JPEG (*.jpg *.jpeg);;PNG (*.png)" ));

        QPixmap pm =ui->label2->pixmap();

            if (!pm.isNull() && !imagePath.isEmpty() )
            {
                 image =pm.toImage() ;
                 image.save(imagePath);
            }

标签: c++qt

解决方案


一个可能的解决方案是检查它是否有扩展名,如果没有,则添加扩展名:

const QStringList validSuffixes({"png", ".jpg"})

QString imagePath = QFileDialog::getSaveFileName(this, tr("Save File"),"", tr("JPEG (*.jpg *.jpeg);;PNG (*.png)" ));

QPixmap pm =ui->label2->pixmap();

if (!pm.isNull() && !imagePath.isEmpty()){
    QFileInfo info(imagePath);
    if(!validSuffixes.contains(info.suffix())){
        imagePath = info.baseName() + ".jpg";
    }
    pm.save(imagePath);
}

推荐阅读