前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt读写文件(2种方式)实现详解

Qt读写文件(2种方式)实现详解

作者头像
zls365
发布2020-08-19 11:18:52
1.2K0
发布2020-08-19 11:18:52
举报
文章被收录于专栏:CSharp编程大全CSharp编程大全

FileWR.h

代码语言:javascript
复制
#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_FileWR.h"

class FileWR : public QMainWindow
{
  Q_OBJECT

public:
  FileWR(QWidget *parent = Q_NULLPTR);

private:
  Ui::FileWRClass ui;

private slots:
  void on_pushButton_clicked();
  bool FileWR::openTextByIODevice(const QString &aFileName);
  bool FileWR::saveTextByIODevice(const QString &aFileName);
  bool FileWR::saveTextByStream(const QString &aFileName);
  bool FileWR::openTextByStream(const QString &aFileName);
};

FileWR.cpp

代码语言:javascript
复制
#include "FileWR.h"
#include <qdir.h>
#include <qfiledialog.h>
#include <qmessagebox.h>
#include <qtextstream.h>

//加上这三句可解决中文乱码,但是不可以和QString::fromLocal8Bit或QStringLiteral同时使用
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif

FileWR::FileWR(QWidget *parent)
  : QMainWindow(parent)
{
  ui.setupUi(this);
}
void FileWR::on_pushButton_clicked()
{//打开文件

  QString curPath = QDir::currentPath();//获取系统当前目录
  QString dlgTitle = "打开一个文件"; //对话框标题
  QString filter = "程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)"; //文件过滤器
  QString aFileName = QFileDialog::getOpenFileName(this, dlgTitle, curPath, filter);//全路径 C:\Users\zls\source\repos\FileWR\FileWR\1.txt
  //QString aFileName = QFileDialog::getSaveFileName(this, dlgTitle, curPath, filter);
  //QMessageBox::information(this, "提示", aFileName);
  if (aFileName.isEmpty())
    return;
  openTextByIODevice(aFileName);
  saveTextByIODevice(curPath+"\\2.txt");
  saveTextByIODevice(curPath + "\\3.txt");
  openTextByStream(curPath + "\\4.txt");
}
bool FileWR::openTextByIODevice(const QString &aFileName)
{//用IODevice方式打开文本文件
  QFile   aFile(aFileName);
  if (!aFile.exists()) //文件不存在
    return false;
  if (!aFile.open(QIODevice::ReadOnly | QIODevice::Text))
    return false;
  ui.textEdit->setPlainText(aFile.readAll());// .对象 ->指针
  aFile.close();

  //ui->textEditDevice->setPlainText(aFile.readAll());
  //aFile.close();
  //ui->tabWidget->setCurrentIndex(0);
  return  true;
}
bool FileWR::saveTextByIODevice(const QString &aFileName)
{ //用IODevice方式保存文本文件
  QFile aFile(aFileName);
  //aFile.setFileName(aFileName);
  if (!aFile.open(QIODevice::WriteOnly | QIODevice::Text))
    return false;
  QString str = ui.textEdit->toPlainText();//整个内容作为字符串
  QByteArray  strBytes = str.toUtf8();//转换为字节数组
  //QByteArray  strBytes=str.toLocal8Bit();
  aFile.write(strBytes, strBytes.length());  //写入文件
  aFile.close();
  //ui->tabWidget->setCurrentIndex(0);
  return true;
}

bool FileWR::saveTextByStream(const QString &aFileName)
{//用QTextStream保存文本文件
  QFile aFile(aFileName);
  if (!aFile.open(QIODevice::WriteOnly | QIODevice::Text))
    return false;
  QTextStream aStream(&aFile); //用文本流读取文件
  QString str = ui.textEdit->toPlainText(); //转换为字符串
  aStream << str; //写入文本流
  aFile.close();//关闭文件
  return  true;
}
bool FileWR::openTextByStream(const QString &aFileName)
{ //用 QTextStream打开文本文件
  QFile aFile(aFileName);
  if (!aFile.exists()) //文件不存在
    return false;
  if (!aFile.open(QIODevice::ReadOnly | QIODevice::Text))
    return false;
  QTextStream aStream(&aFile); //用文本流读取文件
  aStream.setAutoDetectUnicode(true); //自动检测Unicode,才能正常显示文档内的汉字
  //ui.textEdit->setPlainText(aStream.readAll());
  ui.textEdit->clear();//清空
  QString str;
  while (!aStream.atEnd())
  {
    str = aStream.readLine();//读取文件的一行
    ui.textEdit->append(str); //添加到文本框显示
    
  }
  aFile.close();//关闭文件
  //ui->tabWidget->setCurrentIndex(1);
  return  true;
}

运行结果:

参考链接:

http://c.biancheng.net/view/1877.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSharp编程大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档