首页 > 代码库 > Qt小程序仿写----FileRead程序
Qt小程序仿写----FileRead程序
该程序实现如下功能:1.打开TXT文件A.txt;2.将文件路径显示到一个文本编辑框里面,文件内容显示到一个文本域里面;3.在文本域里面更改文件内容之后,保存文本域的内容到当前文件路径下。
定义了一FileRead类,继承于QMainWindow,该类下定义了两个槽:打开文件openFileButton_Clicked和保存文件saveFileButton_Clicked;两个私有函数initSlots和saveFile。类定义如下:
#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 |
下面就具体介绍槽和私有函数的实现和思路。
- 打开文件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流¢¡Â把ã?文?件t中D的Ì?内¨²容¨Y返¤¦Ì埴¨²到Ì?fileEdit中D去¨£¤ QTextStream in(&file); #ifndef QT_NO_CURSOR QApplication::setOverrideCursor(Qt::WaitCursor); #endif ui.fileEdit->setPlainText(in.readAll()); #ifndef QT_NO_CURSOR QApplication::restoreOverrideCursor(); #endif } } |
- 保存文件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); } } |
- 保存文件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把ã?textBwsr中D的Ì?内¨²容¨Y保À¡ê存ä?到Ì?文?件t中D去¨£¤ 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; } |
- 私有函数initSlots,该函数定义了打开和保存两个按钮的信号和槽关联。代码如下:
void FileReader::initSlots() { // 当Ì¡À单Ì£¤击¡Â【?打䨰开a】?按ã¡ä钮£¤时º¡À触䣤发¤¡é的Ì?信?号?与®?槽?的Ì?连¢?接¨® connect(ui.openFileButton, SIGNAL(clicked()), this, SLOT(openFileButton_Clicked())); // 当Ì¡À单Ì£¤击¡Â【?保À¡ê存ä?】?按ã¡ä钮£¤时º¡À触䣤发¤¡é的Ì?信?号?与®?槽?的Ì?连¢?接¨® connect(ui.saveFileButton, SIGNAL(clicked()), this, SLOT(saveFileButton_Clicked())); } |
- 构造函数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程序