QT筆記(6)——Qt開啟檔案與儲存檔案
阿新 • • 發佈:2019-01-09
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,"資訊","儲存失敗");
}
}
效果如下: