Qt之文件系统操作和读写
Qt creator 6.80 MinGw 64bit
文本文件是指以纯文本格式存储的文件,如cpp和hpp文件。XML文件和JSON文件也是文本文件,只是使用了特定的标记符号定义文本的含义,读取这种文本文件需要先对内容解析再显示。
qt提供了两种读写文本文件的方法。
一种是QFile,另一种是QTextStream。
下面介绍这两种方法的使用。
软件界面设计如下
软件运行界面
程序结构如下
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.hpp和mainwindow.cpp代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_actOpenFile_triggered();
void on_actQFileSave_triggered();
void on_actQSaveFileSave_triggered();
void on_actOpenStream_triggered();
void on_actQTextStreamSave_triggered();
private:
QString getFileName(bool save=false);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
/***********************************************mainwindow.cpp****************************/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDir>
#include<QFileDialog>
#include<QSaveFile>
#include<QException>
#include<QTextDocument>
#include<QTextBlock>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setCentralWidget(ui->tabWidget);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actOpenFile_triggered()
{
QString aFileName;
aFileName=getFileName(false);
QFile aFile(aFileName);
if(!aFile.exists()) return ;
if(!aFile.open(QIODevice::ReadOnly|QIODevice::Text))
return ;
QByteArray allLines=aFile.readAll();
QString text(allLines);
ui->textEditDevice->setPlainText(text);
aFile.close();
ui->tabWidget->setCurrentIndex(0);
}
QString MainWindow::getFileName(bool save)
{
QString curPath=QDir::currentPath();
QString dlgTitle="打开一个文件";
QString filter="程序文件(*.cpp *.h);;文本文件(*.txt);;所有文件(*.*)";
QString aFileName;
if(save)
aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
else
aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
if(aFileName.isEmpty()) return aFileName;
QFileInfo fileInfo(aFileName);
QDir::setCurrent(fileInfo.absoluteFilePath());
return aFileName;
}
void MainWindow::on_actQFileSave_triggered()
{
QString aFileName=getFileName(true);
if(aFileName.isEmpty()) return;
QFile aFile(aFileName);
if(!aFile.open(QIODevice::WriteOnly|QIODevice::Text))
{
return ;
}
QString str=ui->textEditDevice->toPlainText();
QByteArray strBytes=str.toUtf8();
aFile.write(strBytes,strBytes.length());
aFile.close();
ui->tabWidget->setCurrentWidget(0);
}
void MainWindow::on_actQSaveFileSave_triggered()
{
QString aFileName=getFileName(true);
QSaveFile aFile(aFileName);
if(!aFile.open(QIODevice::WriteOnly|QIODevice::Text))
{
return ;
}
aFile.setDirectWriteFallback(false);//使用临时文件
try{
QString str=ui->textEditDevice->toPlainText();
QByteArray strBytes=str.toUtf8();
aFile.write(strBytes,strBytes.length());
aFile.commit();
ui->tabWidget->setCurrentIndex(0);
}
catch (QException &e)
{
qDebug("保存文件过程发生错误");
aFile.cancelWriting();
}
}
void MainWindow::on_actOpenStream_triggered()
{
QString aFileName=getFileName(false);
QFile aFile(aFileName);
if(!aFile.exists()) return ;
if(!aFile.open(QIODevice::ReadOnly|QIODevice::Text))
return ;
QTextStream aStream(&aFile);
aStream.setAutoDetectUnicode(true);
QString str=aStream.readAll();
ui->textEditStream->appendPlainText(str);
aFile.close();
}
void MainWindow::on_actQTextStreamSave_triggered()
{
QString aFileName=getFileName(true);
QSaveFile aFile(aFileName);
if(!aFile.open(QIODevice::WriteOnly|QIODevice::Text))
return ;
aFile.setDirectWriteFallback(false);
try{
QTextStream aStream(&aFile);
aStream.setAutoDetectUnicode(true); //写入临时文件
QTextDocument *doc=ui->textEditStream->document();
int cnt=ui->textEditStream->blockCount();
for(int i=0;i<cnt;i++)
{
QTextBlock textLine=doc->findBlockByLineNumber(i);
QString str=textLine.text();
aStream<<str<<"\n";
}
aFile.commit();
}
catch(QException &e)
{
qDebug("保存文件过程发生错误");
aFile.cancelWriting();
}
}
原文地址:https://blog.csdn.net/suntingsheng123/article/details/145207893
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!