QT:QFileDialog和QFile的使用(四)

一、逻辑思路

1、打开文件

1、创建dialog窗体,静态调用QFileDialog::getfilename,并QString输出
2、判断filename名字是否为空
3、创建QFile指针myfile,设置指针文件名setFileName
4、打开文件夹返回bool值
5、判断文件是否打开成功
6、while(判断文件是否到文件末尾)
{
读取文件defile MEG_LEN=1024
QByteArray ba =myfile.read(MEG_LEN)
QString str = QString(ba)
}
7、关闭文件
QT:QFileDialog和QFile的使用(四)_第1张图片

2、保存文件

1、打开获取保存文件的QFileDialog::getSaveFileName来输入文件名,返回值为输入的文件名
2、判断文件名是否为空,QMessage输出错误显示
3、设置QFile的指针名(为输入的文件名),QFile的指针打开文件,返回值为是否打开文件
4、对返回值进行判断是否打开成功,QMessage输出错误显示
5、获取ui.EditText的输入内容
6、QFile指针用write函数对文件进行写入
7、QFile指针用close函数关闭文件
QT:QFileDialog和QFile的使用(四)_第2张图片

.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include 
#include 
#include 
#include 
#include 
#define MES_LENGTH 1024

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    myfile = new QFile(this);
}

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

void Widget::on_pushButton_clicked()
{
    QString fd = QFileDialog::getOpenFileName(this,"get file","../fileDialog_4_1/","SOURCE(*.cpp);;HEADERS(*.h);;FORMS(*.ui)");
    qDebug()<<fd<<endl;
    if(fd.isEmpty()){
        QMessageBox::warning(this,"file open","file can't open!");
        return;
    }
    myfile->setFileName(fd);
    bool ret = myfile->open(QIODevice::ReadOnly|QIODevice::Text);
    if(!ret){
        QMessageBox::warning(this,"warning","open fail");
        return;
    }
   // char buff[MEG_LENGTH+1] = {0};
    //QTextStream myqts(myfile);
    //第一种:QFile直接读取的方式

    while(!myfile->atEnd()){
        QByteArray ba = myfile->readLine();
        QString str = QString(ba);
        ui->textBrowser->append(str);
    }

    /*
    //第二种:二进制文件流的形式读取
    QTextStream text(myfile);
    while(!text.atEnd())
    {
        QString ba = text.readLine();
        QString str = QString(ba);
        ui->textBrowser->append(ba);
    }
    */
    myfile->close();

}

void Widget::on_pushButton_2_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(this,"save file","../fileDialog_4_1","Text(*.cpp *.h)");
    if(fileName.isEmpty()){
        QMessageBox::warning(this,"warning","fileName is empty");
        return;
    }
    myfile->setFileName(fileName);
    bool ret = myfile->open(QIODevice::WriteOnly|QIODevice::Text);
    if(!ret){
        QMessageBox::warning(this,"warining","文件打开失败");
        return;
    }
    //直接文件操作
    /*
    QString str = ui->textEdit->toPlainText();
    myfile->write(str.toLocal8Bit());
    myfile->close();
    */
    //文本流操作
    QTextStream mystream(myfile);
    QString str_stream = ui->textEdit->toPlainText();
    mystream<<str_stream;
    mystream.flush();//刷新文件
    myfile->close();
}


.h文件

#ifndef WIDGET_H
#define WIDGET_H
#include 
#include 

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();


private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget *ui;
    QFile *myfile;
};

#endif // WIDGET_H

你可能感兴趣的:(qt)