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