QT笔记(6)——Qt打开文件与保存文件

Qt打开文件与保存文件,首先打开文件,qt给了一个方法直接调用就好,如下:

static QString getOpenFileName(QWidget *parent = Q_NULLPTR,
                                   const QString &caption = QString(),
                                   const QString &dir = QString(),
                                   const QString &filter = QString(),
                                   QString *selectedFilter = Q_NULLPTR,
                                   Options options = Options());
通用解释如下:

第一个参数parent,用于指定父组件。注意,很多Qt组件的构造函数都会有这么一个parent参数,并提供一个默认值0; 
第二个参数caption,是对话框的标题; 
第三个参数dir,是对话框显示时默认打开的目录,"." 代表程序运行目录,"/" 代表当前盘符的根目录(Windows,Linux下/就是根目录了),也可以是平台相关的,比如"C:\\"等; 
第四个参数filter,是对话框的后缀名过滤器,比如我们使用"Image Files(*.jpg *.png)"就让它只能显示后缀名是jpg或者png的文件。如果需要使用多个过滤器,使用";;"分割,比如"JPEG Files(*.jpg);;PNG Files(*.png)"; 
第五个参数selectedFilter,是默认选择的过滤器; 
第六个参数options,是对话框的一些参数设定,比如只显示文件夹等等,它的取值是enum QFileDialog::Option,每个选项可以使用 | 运算组合起来。
下面以工程实例具体说打开文件和保存文件具体操作,工程是加载一个图片到label中,在将图片改名保存到指定文件夹中,具体操作如下:

1.新建一个mainwindow工程,在ui里添加一个label,格栅布局;


2.在菜单栏中添加文件》打开,保存,如下:


3.编辑动作,添加槽,如下:


4.转到槽进行编辑,如下:


5.转到槽,选择信号类型:


6.代码如下,mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QImage>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    int globalMark;//保存标记用
    QImage globalImg;//存储图片用

private slots:
    void on_ac_openfile_triggered();
    void on_ac_save_triggered();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QMessageBox>
#include <QFileDialog>
#include <QDebug>
#include <QTime>
#include <QDir>
#include <QFile>

#pragma execution_character_set("utf-8")

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    globalMark=0;
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_ac_openfile_triggered()
{
   ui->label->clear();//先清除label内容
    //打开图片操作
    QString fileName = QFileDialog::getOpenFileName(
                this, tr("open image file"),
                "./", tr("Image files(*.bmp *.jpg *.pbm *.pgm *.png *.ppm *.xbm *.xpm);;All files (*.*)"));

    if(fileName.isEmpty())
    {
        QMessageBox mesg;
        mesg.warning(this,"警告","打开图片失败!");
        return;
    }
    else
    {
        QImage img(fileName);
        img=img.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);//Qt::KeepAspectRatio自适应大小,不变形
        ui->label->setPixmap(QPixmap::fromImage(img));
        if(img.isNull())
        {
            QMessageBox::information(this,"信息","打开文件失败");
        }
        else
        {
            globalMark=1;//存储标记,用于判断是否有文件
            globalImg=img;
        }
    }
}

void MainWindow::on_ac_save_triggered()
{
    if( globalMark==1)//r如果标记为1,证明有文件加载,不然没有不需要保存
    {
        QString dirPath;//创建文件夹路径
        QString filePath;//存储保存路径
        QString saveName="保存实验图";//保存图片名字
        QDateTime time = QDateTime::currentDateTime();//获取系统现在的时间
        QString str = time.toString("yyyyMMdd_hhmmss"); //设置显示格式
        filePath = QFileDialog::getExistingDirectory(this,"");//获取文件夹路径
        if(filePath.isEmpty())
        {
            QMessageBox::information(this,"信息","保存失败");
        }
        else
        {
            dirPath=QString("%1/保存实验%2").arg(filePath).arg(str);
            QDir *temp = new QDir;//声明文件对象
            temp->mkdir(dirPath);//创建文件夹
            QImage images;
            images=globalImg;//获取加载图片

            //将图片重新命名并保存至刚刚创建的文件夹里
            QString savePath=QString("%1//%2.jpg").arg(dirPath).arg(saveName);
            images.save(savePath);//QImage保存方法
            QMessageBox::information(this,"信息","保存成功");
        }
    }
    else
    {
        QMessageBox::information(this,"信息","保存失败");
    }
}

效果如下:


  • 28
    点赞
  • 190
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值