Qt使用QFile类输入和输出文件。 QFile通过I/0设备读写二进制文作、 文本文件和资源文内容。Qt还提供QTextStream和QDataStream类, 它们能通过数据流有效读写数据。 换言之, 这两个类不直接将数掘记录到文件, 而是通过更为简単的管道等界面读写数据 。

1.QIODevice类的枚举类型

QFile类继承自QFileDevice类。QFileDivice类提供可以在打开的文件中读写数据的界面。还可以提供文件的当前位置、文件大小,拥有刷新功能。

2.Simple文件的View示例

该示例使用QFile类读取文本文件,然后将其输出到QPlainTextEdit类控件。QPlainTextEdit控件提供文本浏览(Vierwer)和编辑(Edit)功能,还可以处理超大文件的文档(Document),有利于编辑器应用程序的开发。

QPlainTextEdit和QTextEdit相似,但提供可编辑文本数据的高级功能。

main.h 主文件:

#include "mynote.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);mynote w;w.show();return a.exec();
}

mynote.h文件:

#ifndef MYNOTE_H
#define MYNOTE_H#include <QtWidgets/QMainWindow>
#include "ui_mynote.h"
#include <qaction.h>
#include <qlabel.h>
#include <qmenu.h>
#include <qmenubar.h>
#include <QHBoxLayout>
#include <qplaintextedit.h>class mynote : public QMainWindow
{Q_OBJECTpublic:mynote(QWidget *parent = 0);~mynote();private:Ui::mynoteClass ui;
private:void createActions();void createMenus();void loadFile(const QString &fileName);QMenu* fileMenu;QAction* openAct;QHBoxLayout* hLayout;QPlainTextEdit* textEdit;QString fileName;
private slots:void open();
};#endif // MYNOTE_H

mynote.cpp文件:

#include <qfiledialog.h>//QFileDialog在其中有定义
#include <qmessagebox.h>
#include <qtextstream.h>
#include "mynote.h"mynote::mynote(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);///setFixedSize(600, 500);textEdit = new QPlainTextEdit;setCentralWidget(textEdit);createActions();createMenus();
}mynote::~mynote()
{
}void mynote::createActions()
{openAct = new QAction(tr("&Open..."), this);  //创建菜单栏中的子项openAct->setShortcuts(QKeySequence::Open); //封装成快捷键connect(openAct, SIGNAL(triggered()),this, SLOT(open()));
}void mynote::createMenus()
{fileMenu = menuBar()->addMenu(tr("&File")); //创建菜单栏fileMenu->addAction(openAct); //将子项加入到菜单栏中
}//槽函数 负责打开文件
void mynote::open()
{QString fileName = QFileDialog::getOpenFileName(this);if (!fileName.isEmpty())loadFile(fileName);
}void mynote::loadFile(const QString &fileName)
{QFile file(fileName);if (!file.open(QFile::ReadOnly | QFile::Text))  //打开文件的方式{QMessageBox::warning(this,tr("Application"),tr("Can't read file %1:\n%2").arg(fileName).arg(file.errorString()));return;}QTextStream in(&file);  //以文件流的形式打开textEdit->setPlainText(in.readAll());  //读取文件所有文本
}

解释说明:

  • 在应用程序菜单中,函数createAction()用于处理事件;函数createMenu()用于将【File】菜单选项添加到菜单栏。若用户在菜单上点击【File】,函数connection()会发生信号-槽事件。
  • Qaction类中的openAct实例中,若用户点击菜单上的【打开】,就会调用信号-槽事件的中open()函数。setShortcuts()函数可以在被定义的项目使用和打开对应的快捷键
  • 利用QTextStream类,通过流处理从QFile读取的文件数据,并将从最后一行读取到的文件文本输出到QPlainTextEdit类的索引。
  • QFileDialog类提供了能选择文件的GUI。利用此类可以通过文件过滤器选择特定文件的扩展名,还可以检测最近打开的文件目录以及设置默认目录。

Qt修炼手册5_文件输入输出相关推荐

  1. Qt修炼手册3_VS建立的Qt工程(或项目)生成pro文件

    利用VS2008建立的Qt工程(或项目)要使用Qt Creator开发时,需要生成pro文件.下面介绍该过程. 1.右击工程(不是解决方案)名称,点击Create basic .Pro file 点击 ...

  2. Qt修炼手册9_Ui名字空间及setupUi()原理解读

    1.前言 用最新的QtCreator选择GUI的应用会产生含有如下文件的工程: 1.1 *.pro文件 QT += core gui //使用Qt的Core和Gui模块.QT将自己的库函数分为多个模块 ...

  3. Qt修炼手册7_图形:用户自定义QGraphicsItem

    1.前言 Qt中提供的Item未必能够满足需要,因此有必要实现自定义的QGraphicsItem对象.与QPushButton一样,如果发生鼠标事件,那么为了更换被点击按钮的图像,可以使用paint实 ...

  4. Qt修炼手册4_信号与槽

    1.前言 为了处理个体间的通信事件,Qt提供了信号与槽.信号与槽不仅可以处理GUI上发生的事件,也可以实现个体间的数据通信.值得深入把握. 2.信号与槽 信号与槽是一种用于对象间通信的机制.为了用户在 ...

  5. Qt修炼手册1_溢美之词和Designer设计

    1.QT是啥? Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立艺术级图形用户界面所需的所有功能.Qt是诺基亚公司的一个产品. 1996年, Qt进入商业领域,已成为全世界 ...

  6. Qt修炼手册12_线程同步与线程等待条件

    1.同步线程:何为同步? 参考百度百科: 1.1 线程 线程是进程中的一个实体,是被系统独立调度和分配的基本单位.一个进程可以有多个线程,一个线程必须有一个父进程,线程自己不拥有系统资源,只有运行必须 ...

  7. Qt修炼手册11_多线程编程和QThread类

    1.事件循环 学习QT多线程编程之前,有必要先熟悉事件循环的概念. 先看一个单线程界面程序的主函数代码: int main(int argc, char* argv[]) {QApplication ...

  8. Qt修炼手册10_QTableWidget控件使用说明及实践

    1.QTableWidget类简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件. QTableWidget继承于类QTableView,所以在学习QTableWidget之前可 ...

  9. Qt修炼手册8_常用的容器类QVector和QList

    1.前言 Qt提供了非常有用的容器类的迭代器类,用于修改.删除.插入和保存数据.本着学习的角度,重点研究了QVector和QList两个类. QT中,具有STL风格的迭代器具有两种数据类型,分别是只读 ...

最新文章

  1. windows 导出 oracle,windows 环境下oracle导入导出
  2. C#调用Web Service时的身份验证
  3. Docker学习总结(55)——Google和Facebook为什么不用Docker?
  4. centos7.2 使用rpm安装jdk8
  5. 通过整数索引选择一行熊猫系列/数据框
  6. 乐鑫Esp32学习之旅30 对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。(附带源码)
  7. 按是否运行源代码划分: 静态测试和动态测试
  8. IT行业都有哪些职位,初学者(0基础,新人)该如何选择,才能够快速进入这个行业?...
  9. CSS简单的图片居中
  10. IIS 访问页面出现500 – 内部服务器错误的解决方案
  11. python使用you-get下载视频
  12. Postman如何使用(三):使用数据文件【入门到精通】
  13. 遍历Python字典
  14. Ubuntu 11.10 Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答
  15. 顺序表类的声明java_顺序表实现解约瑟夫环_Java
  16. 人脉经营全攻略:认识、经营与开发
  17. Redis事务、MULTI 命令和EXEC 命令
  18. 怎么用clementine做关联规则分析
  19. verilog使用注意知识点
  20. SIR Audio Tools Standard CLIP Mac - 高级音频剪辑插件

热门文章

  1. IE6下png图片透明代码
  2. 走进移动web开发的四大框架
  3. 基础练习 Huffuman树 (优先队列)
  4. hdu 5230(整数划分,dp)
  5. hdu 3078(LCA+排序)
  6. nyoj-754--黑心医生
  7. NYOJ 76 超级台阶
  8. hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (背包问题)
  9. Pycharm中Python3连接Oracle
  10. MySQL 特殊参数