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

来源:互联网 发布:淘宝找苹果手机可信吗 编辑:程序博客网 时间:2024/06/08 03:29

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_OBJECTpublic:    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,"信息","保存失败");    }}

效果如下:


原创粉丝点击