12.文件操作例子

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtWidgets>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private slots:

    void on_actionOpen_triggered();

    void on_actionSave_triggered();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    this->setWindowTitle(QString("记事本"));
    this->setWindowIcon(QIcon("://res/notepad.png"));
}

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

/**
 * @brief
 * 1.状态栏提示打开信息
 * 2.打开文件:打开文件对话框
 * 3.读取文件内容
 * 4.显示到窗体
 */
void MainWindow::on_actionOpen_triggered()
{
    ui->statusBar->showMessage(QString("open file"));

    QString fileName = QFileDialog::getOpenFileName(this, tr("打开"),
                                                    ".",
                                                    tr("text (*.txt *.c *.cpp)"));

    if(fileName.isEmpty()){
        ui->statusBar->showMessage(QString("打开失败"));
        return;
    }

    QFile file;
    file.setFileName(fileName);

    if(!file.open(QIODevice::ReadOnly)){
        ui->statusBar->showMessage(QString("打开失败"));
        return;
    }

    QTextStream in(&file);
    QString str = in.readAll();

    ui->textEdit->setPlainText(str);
}

/**
 * @brief 保存操作
 * 1.提示
 * 2.选择保存文件的位置
 * 3.新建文件,并保存内容
 */
void MainWindow::on_actionSave_triggered()
{
    ui->statusBar->showMessage(QString("save file"));

    QString fileName = QFileDialog::getSaveFileName(this, tr("保存"),
                               "./untitled.txt",
                               tr("text (*.txt *.c *.cpp)"));

    if(fileName.isEmpty()){
        ui->statusBar->showMessage(QString("保存失败"));
        return;
    }

    QFile file(fileName);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)){
        ui->statusBar->showMessage(QString("保存失败"));
        return;
    }

    QTextStream out(&file);
    out << ui->textEdit->toPlainText();
}

编程实例:文件拷贝器
窗口上放置一个按钮和一个进度条部件,点击按钮后,
打开对话框选择源文件,选择后再打开对话框选择
目标文件存放位置和名称,然后进行拷贝操作。

#include "copywig.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    CopyWig w;
    w.show();

    return a.exec();
}
#ifndef COPYWIG_H
#define COPYWIG_H

#include <QtWidgets>

namespace Ui {
class CopyWig;
}

class CopyWig : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_copyBtn_clicked();

private:
    Ui::CopyWig *ui;
};

#endif // COPYWIG_H
#include "copywig.h"
#include "ui_copywig.h"

CopyWig::CopyWig(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::CopyWig)
{
    ui->setupUi(this);
    ui->progressBar->setValue(0);
}

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

/**
 * @brief CopyWig::on_copyBtn_clicked
 1.选择源文件和目标文件
 2.复制操作--进度条显示
 */
void CopyWig::on_copyBtn_clicked()
{
    QString srcName = QFileDialog::getOpenFileName(this, tr("Open File"),
                                                    "d:",
                                                    tr("All (*.*)"));
    ui->srcEdit->setText(srcName);

    QString dstName = QFileDialog::getSaveFileName(this, tr("Save File"),
                               "d:/untitled",
                               tr("All (*.*)"));
    ui->dstEdit->setText(dstName);

    //复制操作:把源文件分解成帧,然后写入目标文件
    QFile srcFile(srcName);
    if(!srcFile.open(QIODevice::ReadOnly)){
        qDebug()<<"open src file failed";
    }


    QFile dstFile(dstName);
    if(!dstFile.open(QIODevice::WriteOnly | QIODevice::Truncate)){
        qDebug()<<"open src file failed";
    }

    QFileInfo info(srcName);
    qint64 totalSize = info.size();
    qint64 copySize = 0;
    int proVal = 0;


    QByteArray buf;
    while (!srcFile.atEnd()) {
        buf = srcFile.read(1024);  //1024 Byte
        dstFile.write(buf);
        copySize += 1024;

        proVal = 100 * copySize / totalSize;
        ui->progressBar->setValue(proVal);
    }

    qDebug()<<"copy success";
}
发布了10 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40083589/article/details/94136754
今日推荐