Qt修炼手册5_文件输入输出
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_文件输入输出相关推荐
- Qt修炼手册3_VS建立的Qt工程(或项目)生成pro文件
利用VS2008建立的Qt工程(或项目)要使用Qt Creator开发时,需要生成pro文件.下面介绍该过程. 1.右击工程(不是解决方案)名称,点击Create basic .Pro file 点击 ...
- Qt修炼手册9_Ui名字空间及setupUi()原理解读
1.前言 用最新的QtCreator选择GUI的应用会产生含有如下文件的工程: 1.1 *.pro文件 QT += core gui //使用Qt的Core和Gui模块.QT将自己的库函数分为多个模块 ...
- Qt修炼手册7_图形:用户自定义QGraphicsItem
1.前言 Qt中提供的Item未必能够满足需要,因此有必要实现自定义的QGraphicsItem对象.与QPushButton一样,如果发生鼠标事件,那么为了更换被点击按钮的图像,可以使用paint实 ...
- Qt修炼手册4_信号与槽
1.前言 为了处理个体间的通信事件,Qt提供了信号与槽.信号与槽不仅可以处理GUI上发生的事件,也可以实现个体间的数据通信.值得深入把握. 2.信号与槽 信号与槽是一种用于对象间通信的机制.为了用户在 ...
- Qt修炼手册1_溢美之词和Designer设计
1.QT是啥? Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立艺术级图形用户界面所需的所有功能.Qt是诺基亚公司的一个产品. 1996年, Qt进入商业领域,已成为全世界 ...
- Qt修炼手册12_线程同步与线程等待条件
1.同步线程:何为同步? 参考百度百科: 1.1 线程 线程是进程中的一个实体,是被系统独立调度和分配的基本单位.一个进程可以有多个线程,一个线程必须有一个父进程,线程自己不拥有系统资源,只有运行必须 ...
- Qt修炼手册11_多线程编程和QThread类
1.事件循环 学习QT多线程编程之前,有必要先熟悉事件循环的概念. 先看一个单线程界面程序的主函数代码: int main(int argc, char* argv[]) {QApplication ...
- Qt修炼手册10_QTableWidget控件使用说明及实践
1.QTableWidget类简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件. QTableWidget继承于类QTableView,所以在学习QTableWidget之前可 ...
- Qt修炼手册8_常用的容器类QVector和QList
1.前言 Qt提供了非常有用的容器类的迭代器类,用于修改.删除.插入和保存数据.本着学习的角度,重点研究了QVector和QList两个类. QT中,具有STL风格的迭代器具有两种数据类型,分别是只读 ...
最新文章
- windows 导出 oracle,windows 环境下oracle导入导出
- C#调用Web Service时的身份验证
- Docker学习总结(55)——Google和Facebook为什么不用Docker?
- centos7.2 使用rpm安装jdk8
- 通过整数索引选择一行熊猫系列/数据框
- 乐鑫Esp32学习之旅30 对接华为IoT物联网平台适配踩坑,使用ESP-IDF 编程使用HTTPS请求固件跳过证书校验,实现OTA远程升级文件。(附带源码)
- 按是否运行源代码划分: 静态测试和动态测试
- IT行业都有哪些职位,初学者(0基础,新人)该如何选择,才能够快速进入这个行业?...
- CSS简单的图片居中
- IIS 访问页面出现500 – 内部服务器错误的解决方案
- python使用you-get下载视频
- Postman如何使用(三):使用数据文件【入门到精通】
- 遍历Python字典
- Ubuntu 11.10 Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答
- 顺序表类的声明java_顺序表实现解约瑟夫环_Java
- 人脉经营全攻略:认识、经营与开发
- Redis事务、MULTI 命令和EXEC 命令
- 怎么用clementine做关联规则分析
- verilog使用注意知识点
- SIR Audio Tools Standard CLIP Mac - 高级音频剪辑插件