1. QFile QDataStream 读写文件  二进制读写文件

#include <QApplication>
#include <QtGui>
#include <QtDebug> int main(int argc, char *argv[])
{
QMap<QString, QColor> map;
map.insert("red", Qt::red);
map.insert("green", Qt::green);
map.insert("bule", Qt::blue); QFile file("123.txt");
if( !file.open(QIODevice::WriteOnly) )
qDebug() << "open file fail"; QDataStream out(&file);
out.setVersion(9);
out << quint32(0x12345678) << map;
}
#include <QApplication>
#include <QtGui>
#include <QtDebug>
#include <iostream> int main(int argc, char *argv[])
{
QFile file("123.txt");
if( !file.open(QIODevice::ReadWrite) )
qDebug() << "open file fail"; QDataStream in(&file);
in.setVersion(9);
QString str1, str2;
in >> str1 >> str2; qDebug() << str1 << str2;
}

2. QDataStream实例  -- 《转载》http://blog.csdn.net/Last_Impression/article/details/2418878

我们使用自定义的二进制格式来实现Spreadsheet文件的保存和读取。我们用QFile和QDataStream这两个类来实现,它们一起提供了平台无关的二进制I/O。
首先是保存文件的代码:
bool Spreadsheet::writeFile(const QString &fileName)

{

    QFile file(fileName);

    if (!file.open(QIODevice::WriteOnly)) {

        QMessageBox::warning(this, tr("Spreadsheet"),

                             tr("Cannot write file %1: %2.")

                             .arg(file.fileName())

                             .arg(file.errorString()));

        return false;

    }

    QDataStream out(&file);

    out.setVersion(QDataStream::Qt_4_1);

    out << quint32(MagicNumber);

    QApplication::setOverrideCursor(Qt::WaitCursor);

    for (int row = 0; row < RowCount; ++row) {

        for (int column = 0; column < ColumnCount; ++column) {

            QString str = formula(row, column);

            if (!str.isEmpty())

                out << quint16(row) << quint16(column) << str;

        }

    }

    QApplication::restoreOverrideCursor();

    return true;

}
函数writeFile()由MainWindow::saveFile()调用,把文件保存到磁盘上。如果保存成功返回true,否则返回false。
首先我们使用给定的程序名创建一个QFile对象,调open()打开这个文件准备写入。同时创建一个QDataSteam对象来操作QFile对象,将数据写入文件中。
在写数据之前,我们将程序的光标换成等待形式,数据写完后恢复原来的鼠标形状。函数结束时,QFile的析构函数把文件自动关闭。
QDataStream支持基本的C++类型,也支持多种Qt类型。语法和标准C++<iostream>类是一样的。例如:
Out<<x<<y<<z;把变量x,y,z写入数据流。
In>>x>>y>>z; 从数据流中读取数据到x,y,z中。在不同的平台上,基本的C++类型如short,char,int,long,long long会有不同的字长。最好把它们转换为qint8,quint8,qint16,quint16,qint32,quint32,qint64,quint64,这些类型能确保字长是不随平台改变的。
Spreadsheet程序的文件格式非常简单。一个Spreadsheet文件开头部分是一个32位的标识数字(MagciNumber,在spreadsheet.h中定义的,一个二进制的随机数),这个数字后面是一系列的数据块,包括一个单元格的行号,列号和公式组成。为了节省空间,不保存空的单元格。
数据类型的二进制表示由类QDataStream决定。如:quint16表示按big-endian顺序保存为两个字节。一个QString类型表示是字符串的长度后面接着Unicode码组成。
自Qt1.0以来,Qt数据类型的二进制表示有了很大变化。在未来的Qt版本中还可能有更多的改变,默认QDataStream使用最近的Qt版本的二进制格式(version 7 in Qt 4.1),但是它可以读取以前的版本。为了程序用新的Qt版本重新编译后能够更好的兼容,我们显式的给出QDataStream使用的版本为7(QDataStream::Qt_4_1定义为常量7)
QDataStream可以支持多种类型。如QFile,QBuffer,QProcess,QTcpSocket或者QUdpSocket。Qt还提供了类QTextStream能够读写文本文件。第12章详细介绍这些类。
读取文件如下:
bool Spreadsheet::readFile(const QString &fileName)

{

    QFile file(fileName);

    if (!file.open(QIODevice::ReadOnly)) {

        QMessageBox::warning(this, tr("Spreadsheet"),

                             tr("Cannot read file %1: %2.")

                             .arg(file.fileName())

                             .arg(file.errorString()));

        return false;

    }

    QDataStream in(&file);

    in.setVersion(QDataStream::Qt_4_1);

    quint32 magic;

    in >> magic;

    if (magic != MagicNumber) {

        QMessageBox::warning(this, tr("Spreadsheet"),

                             tr("The file is not a Spreadsheet file."));

        return false;

    }

    clear();

    quint16 row;

    quint16 column;

    QString str;

    QApplication::setOverrideCursor(Qt::WaitCursor);

    while (!in.atEnd()) {

        in >> row >> column >> str;

        setFormula(row, column, str);

    }

    QApplication::restoreOverrideCursor();

    return true;

}

函数readFile()和writeFile()很相似。这次文件的打开方式为QIODevice::ReadOnly而不是QIODevice::writeOnly。设置QDataStream的版本为7。写文件和读文件的版本必须一致。

如果文件的magic number号是正确的,调用clear()清空所有的表格,因为文件中只是保存了非空的单元格数据,不能保证所有的单元格都会被设置,所以必须确保再读取单元格数据前所有的表格要清空。

3. QTextStream 文件读写

#include <QApplication>
#include <QtGui>
#include <QtDebug>
#include <iostream> int main(int argc, char *argv[])
{
QFile file("456.txt");
if( !file.open(QIODevice::ReadWrite) )
qDebug() << "open file fail";
QTextStream out(&file);
out << "1234" << endl <<"5678" << endl;
file.close(); if( !file.open(QIODevice::ReadWrite) )
qDebug() << "open file fail";
QTextStream in(&file);
QString str1, str2;
str1 = in.readLine();
in >> str2;
qDebug() << str1 << str2;
}

Qt QT的IO流 QT输入输出的更多相关文章

  1. 今天谈谈流,什么是IO流?

    无标题 (5) :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { bord ...

  2. 对QT的产品,以及QT的一些综合评论 good

    QT你不能说他不流行吧, WPS, Wirshark, KDE, dropbox, skype, virtualbox都和qt有关吧, 你想写个跨平台的C++程序, QT是个不错的选择, 普通PC应用 ...

  3. Qt 学习之路 :Qt 模块简介

    Qt 5 与 Qt 4 最大的一个区别之一是底层架构有了修改.Qt 5 引入了模块化的概念,将众多功能细分到几个模块之中.Qt 4 也有模块的概念,但是是一种很粗的划分,而 Qt 5 则更加细化.本节 ...

  4. QT笔记(1)--QT编程环境搭建

    一.QT简介 Qt  是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊 ...

  5. Qt ------ 在 ubuntu 内安装 Qt creator

    官网介绍:https://wiki.qt.io/Install_Qt_5_on_Ubuntu Contents [hide]  1Install Qt 5 on Ubuntu 1.1Introduct ...

  6. Qt Creator的安装与Qt交叉编译的配置

    Qt Creator 的安装 到Qt官网下载Qt Creator  https://www.qt.io/download-open-source/ 其它旧版本点击Achieve连接下载 或登录http ...

  7. Qt 窗口属性简介之Qt::WA_DeleteOnClose

    一.简述 今天介绍一个简单的窗口属性——Qt::WA_DeleteOnClose. 在正常创建窗口后,我们一般会调用close()方法来关闭窗口,这里我们看一下Q助手中关于close()方法的介绍. ...

  8. 【Qt】命令行编译Qt程序(nmake)【转】

    简述 前两节讲解了如何在Visual Studio和Qt Creator中搭建Qt开发环境,并分享了我们第一个小程序-Hello World. 下面分享如何使用命令行来编译Qt程序.当然,MSVC和M ...

  9. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

随机推荐

  1. CodeIgniter框架——访问方式 URI 分配变量 数据库操作

    1.访问方式: CodeIgniter 的访问URL使用的是pathinfo,入口文件/控制器/方法(/参数列表) eg:localhost/index.php/welcome/index/id 第一 ...

  2. I - Doing Homework again(贪心)

    I - Doing Homework again Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

  3. 巨蟒python全栈开发linux之centos1

    1.linux服务器介绍 2.linux介绍 3.linux命令学习 linux默认有一个超级用户root,就是linux的皇帝 注意:我的用户名是s18,密码是centos 我们输入密码,点击解锁( ...

  4. passback_params 支付回调的 原样返回字段 自定义字段的存放字段

    开放平台文档中心 https://docs.open.alipay.com/204/105465/ passback_params String 否 512 公用回传参数,如果请求时传递了该参数,则返 ...

  5. 通知url必须为直接可访问的url,不能携带参数 异步接收微信支付结果通知的回调地址 不能携带参数。 回调地址后是否可以加自定义参数 同步回调地址 异步回调地址 return_url和notify_url的区别

    [微信支付]微信小程序支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7 通知url必须为直接可访问的 ...

  6. W5100硬件设计和调试要点

    文章来源:成都浩然 与MCU的接口 W5100与MCU接口採用并行总线方式(假设要使用SPI接口,建议採用W5200),因此W5100与MCU的接口设计相对简单.以AT89C52为例,例如以下图所看到 ...

  7. Latex技巧:插入参考文献

    LaTeX插入参考文献,可以使用BibTex,也可以不使用BibTex. 方法一:不使用BibTeX 先在文章文章末尾写好需要插入的参考文献,逐一写出,例如: \begin{thebibliograp ...

  8. ABAP锁,数据库锁

    原文出自 江正军 技术博客,博客链接:www.cnblogs.com/jiangzhengjun ABAP数据锁定 SM12锁查看与维护 通用加锁与解锁函数 ABAP程序锁定 数据库锁 锁的分类和兼容 ...

  9. SaltStack远程执行shell脚本

    编辑文件fansik.sh 脚本内容: #!/bin/bash # Author: fansik # data: 2017年 09月 26日 星期二 :: CST touch /tmp/fansik. ...

  10. Git处理 行结束符

    Dealing with line endings (Windows) 如果你正在使用Git在GitHub上和别人协作的话,确保Git处理行结束符的配置已经正确配置了. 每次在键盘上按下return键 ...