首页 > 代码库 > Qt小程序仿写----FileRead程序

Qt小程序仿写----FileRead程序

该程序实现如下功能:1.打开TXT文件A.txt2.将文件路径显示到一个文本编辑框里面,文件内容显示到一个文本域里面;3.在文本域里面更改文件内容之后,保存文本域的内容到当前文件路径下。

定义了一FileRead类,继承于QMainWindow,该类下定义了两个槽:打开文件openFileButton_Clicked和保存文件saveFileButton_Clicked;两个私有函数initSlotssaveFile。类定义如下:

#ifndef FILEREADER_H

#define FILEREADER_H

 

#include <QtWidgets/QMainWindow>

#include "ui_filereader.h"

#include <QString>

#include <QFileDialog>

#include <QTextCodec>

#include <QFile>

#include <QMessageBox>

#include <QTextStream>

 

class FileReader : public QMainWindow

{

    Q_OBJECT

 

public:

    FileReader(QWidget *parent = 0);

    ~FileReader();

 

private:

    void initSlots();    

    bool saveFile(QString strFileName); // À¡êä??t

 

private slots:

    void openFileButton_Clicked();

    void saveFileButton_Clicked();

 

private:

    Ui::FileReaderClass ui;

    //QString fileName;

};

 

#endif // FILEREADER_H

下面就具体介绍槽和私有函数的实现和思路。

  1. 打开文件openFileButton_Clicked,该槽函数实现如下:(1)从一个打开窗口中获取一个文件路径;(2)做一次判断,看该文件是否存在,如果该文件存在的话,就先把文件路径设置到路径显示编辑框中,然后判断是否能够以只读方式或者文本方式打开该文件,不能开该文件的话,就弹出一个对话框显示不能打开该文件,能够打开该文件的话,就进入下一个步骤;(3)用QTextStream读取该文件,读取过程中使用了应用程序强制光标的代码段,这段代码现在还不是太理解它为什么要这么做,后面会给出这段精彩代码的相应官方解释。实现代码如下:

void FileReader::openFileButton_Clicked()

{    

    // 从一个打开窗口获取文件名

    QString fileName = QFileDialog::getOpenFileName(this, QStringLiteral("䨰a?t"), "", tr("Text Files (*.txt)"));

    if(!fileName.isEmpty())

    {

        ui.pathLineEdit->setText(fileName);

        // 䨰a?t

        QFile file(fileName);

        if (!file.open(QFile::ReadOnly | QFile::Text))

        {

            QMessageBox::warning(this, tr("FileReader"),

                                QStringLiteral("?¨¹ä¨°a?t %1:\n%2.")

                                .arg(fileName)

                                .arg(file.errorString()));

            return;

        }

        // ª¡§y?t¢¡Âã??tDÌ?¨²¨Y¤¦Ì¨²Ì?fileEditD¨£¤

        QTextStream in(&file);

        #ifndef QT_NO_CURSOR

        QApplication::setOverrideCursor(Qt::WaitCursor);

        #endif

        ui.fileEdit->setPlainText(in.readAll());

        #ifndef QT_NO_CURSOR

        QApplication::restoreOverrideCursor();

        #endif

    }

}

  1. 保存文件saveFileButton_Clicked,该槽函数实现如下:(1)从窗体上的路径显示框中获取该文件的路径;(2)判断文件路径是否存在,如果存在的话,就调用QFileDialog::getSaveFileName来获取要保存的文件的名字,使用saveFile函数来保存文件,如果不存在的话,也会使用saveFile函数来保存文件,不过,最终都会给出一个保存文件的标志bTag;(3)使用该标志bTag来判断文件是否已经保存成功。实现代码如下:

void FileReader::saveFileButton_Clicked()

{

    bool bTag;

    //D?Ì¡À¡ãº?¤?a°?-䨰aÌ??t

    QString fileName = ui.pathLineEdit->text();

    if(fileName.isEmpty())// ?º?°?䨰aÌ??t

    {

        fileName = QFileDialog::getSaveFileName(this, QStringLiteral("À¡êä?"),

            ".",

            tr("Text File (*.txt)"));

        bTag = saveFile(fileName);

    }

    else

    {

        bTag = saveFile(fileName);

    }

    // À¡êä?º¡ì㨹

    if(!bTag)

    {

        QMessageBox::warning(this, tr("FileReader"), QStringLiteral("?tÀ¡êä?º¡ì㨹ê?"), QMessageBox::Yes);

    }

}

  1. 保存文件saveFile,该私有函数有一个参数strFileName,返回一个bool值,实现保存strFileName文件,实现过程中使用了QTextStream类来保存文件,中间也使用了应用程序强制光标代码段。

bool FileReader::saveFile(QString strFileName) // À¡êä??t

{

    // °?¡äÌ?¤?º?䨰a?t

    QFile file(strFileName);

    if (!file.open(QFile::WriteOnly | QFile::Text))

    {

         QMessageBox::warning(this, tr("FileReader"),

             tr("?¨¹ä¨°a?t %1:\n%2.")

             .arg(strFileName)

             .arg(file.errorString()));

         return false;

    }

     // ª¡§y?tã?textBwsrDÌ?¨²¨YÀ¡êä?Ì??tD¨£¤

    QTextStream out(&file);

    #ifndef QT_NO_CURSOR

    QApplication::setOverrideCursor(Qt::WaitCursor);

    #endif

    out << ui.fileEdit->toPlainText();

    #ifndef QT_NO_CURSOR

    QApplication::restoreOverrideCursor();

    #endif

    return true;

}

  1. 私有函数initSlots,该函数定义了打开和保存两个按钮的信号和槽关联。代码如下:

void FileReader::initSlots()

{

    // Ì¡ÀÌ£¤¡Â?䨰a?ã¡ä£¤º¡À䣤¤¡éÌ???®??Ì?¢?¨®

    connect(ui.openFileButton, SIGNAL(clicked()), this, SLOT(openFileButton_Clicked()));

    // Ì¡ÀÌ£¤¡Â?À¡êä??ã¡ä£¤º¡À䣤¤¡éÌ???®??Ì?¢?¨®

    connect(ui.saveFileButton, SIGNAL(clicked()), this, SLOT(saveFileButton_Clicked()));

}

  1. 构造函数FileReader,该函数主要实现应用程序的一些操作打开和保存等。前面定义了很多函数,主要的都体现在该构造函数里面。实现代码如下:

FileReader::FileReader(QWidget *parent) : QMainWindow(parent)

{

    ui.setupUi(this);    

    

    // ¦¨¨?À¨º¬aê?QStringLiteral¨¦°?ä|¤¨ªD?¨°?

    this->setWindowTitle(QStringLiteral("TXT?t¨¢¡ä"));

 

    initSlots();

}

该程序调试成功后,具体的操作如下流程图所示:

通过程序练习,感觉自己掌握了一下内容:

1.QTextStream如何打开文件,保存文件,显示文件;

2.QTextEdit,QLineEdit显示文本;

3.QMessageBox告警框的显示;

4.简单的信号和槽机制的搭配使用。

精彩代码分析:

Qt小程序仿写----FileRead程序