#include <iostream>
#include <QFile>
#include <QImage>
#include <QMap>
#include <QColor>

class C {
public:
C(quint32 value = 0) :
value(value) {
}

// Override operator << and >>.
friend QDataStream &operator<<(QDataStream &out, const C &obj);
friend QDataStream &operator>>(QDataStream &in, C &obj);

quint32 getValue() const {
return value;
}

private:
quint32 value;
};

QDataStream &operator<<(QDataStream &out, const C &obj) {
out << obj.value;

return out;
}

QDataStream &operator>>(QDataStream &in, C &obj) {
in >> obj.value;

return in;
}

/**
* Copy a file
*/
bool copy(const QString &source, const QString &dest) {
QFile sourceFile(source);
if (!sourceFile.open(QIODevice::ReadOnly)) {
#ifdef DEBUG
std::cerr << sourceFile.errorString().toStdString() << std::endl;
#endif
return false;
}

QFile destFile(dest);
if (!destFile.open(QIODevice::WriteOnly)) {
#ifdef DEBUG
std::cerr << destFile.errorString().toStdString() << std::endl;
#endif
return false;
}

destFile.write(sourceFile.readAll());

return sourceFile.error() == QFile::NoError && destFile.error()
== QFile::NoError;
}

/**
* Instantiate a QFile
* Open the file
* Access the file through q QDataStream object.
*
* Must ensure that we read all the types in exactly the same order
* as we wrote them.
*
* If the DataStream is being purely used to read and write basic C++ data types,
* we dont' even need to call setVersion().
*
* If we want to read or write a file in one go. WE can avoid using QDataStream altogether
* and instead using QIODevice's write() and readAll() function.
* For example copy a file.
*/
int main(int argc, char *argv[]) {
//********Write data in to the file.********
QImage image("Adium.png");
QMap<QString, QColor> map;
map.insert("red", Qt::red);
map.insert("green", Qt::green);
C c(23);
QFile file("data.dat");
if (!file.open(QIODevice::WriteOnly)) {
std::cerr << "Cannot open the file: Write." << file.errorString().toStdString() << std::endl;

return 1;
}

QDataStream out(&file);
out.setVersion(QDataStream::Qt_4_3);
out << quint32(7456) << map << c;
file.close();

//********Read data from the file.********
quint32 value;
QMap<QString, QColor> map2;
C c2;
if (!file.open(QIODevice::ReadOnly)) {
std::cerr << "Cannot open the file: Read." << file.errorString().toStdString() << std::endl;

return 2;
}
QDataStream in(&file);
in.setVersion(QDataStream::Qt_4_3);
in >> value >> map2 >> c2;
file.close();

std::cout << value << std::endl << c2.getValue();

copy(QString("Adium.png"), QString("Copy_Adium.png"));

return 0;
}

http://www.cppblog.com/biao/archive/2008/03/19/44810.html

Qt: 读写二进制文件(写对象, 原始数据等)的更多相关文章

  1. Qt读写二进制文件

    http://blog.csdn.net/mjlsuccess/article/details/22194653 http://www.cnblogs.com/weiweiqiao99/archive ...

  2. C/C++读写二进制文件

    C++读写二进制文件 最近在给android层提供支持,因此代码都是用标准库库函数写出来的,好多windows和第三方的库不能或者很难使用,下面有我在读写二进制文件时候的一些心得,也算是一种总结吧 1 ...

  3. C++入门到理解之文件操作(文本文件的读写+二进制文件的读写)

    原文地址http://www.javayihao.top/detail/168 一:概述 1.程序在运行中产生的数据都是临时数据,程序一旦运行结束会被释放,可以通过文件相关的操作将数据持久保存. 2. ...

  4. 【转】C++读写二进制文件

    原文网址:http://blog.csdn.net/lightlater/article/details/6364931 摘要: 使用C++读写二进制文件,在开发中操作的比较频繁,今天有幸找到一篇文章 ...

  5. [Matlab+C/C++] 读写二进制文件

    introduction 因为Matlab操作简单.方便,它被应用于很多领域:音频处理,图像处理,数值计算等.尽管MATLAB容易操作,但受限于他的语言解释机制,MATLAB的执行速度通常较低.C/C ...

  6. JavaEE JDBC 读写LOB大对象

    JDBC 读写LOB大对象 @author ixenos LOB 除了数字.字符串和日期之外,许多数据库还可以存储大对象,例如图片或其他数据, 在SQL中,二进制(字节型)大对象称为BLOB,字符型大 ...

  7. QT 读写sqllite数据库

    QT 读写sqllite数据库 分类: 技术资料2014-04-10 10:39 84人阅读 评论(0) 收藏 举报 #include <QtGui/QApplication> #incl ...

  8. Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)

    下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this ...

  9. c#写对象来读取TXT文本文件

    本博文让你知道怎样写对象,怎样读取文本文件,怎样根据实际条件判断与获取需要的文本行.参考下面网友的问题,根据源文来看,有些行输出的格式,需要把“,”替换为空格. 第一行还附加入后面的子行每一行的后面, ...

随机推荐

  1. [Bootstrap]全局样式(一)

    页面必须设置为html5文档类型 <!DOCTYPE html> <html lang="zh-CN"> ... </html> 适应移动设备 ...

  2. setTimeout、clearTimeout、setInterval,clearInterval ——小小计时器

    先看下效果 话不多说上代码~ <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Typ ...

  3. zz 李治国:地图大战本质是争抢O2O入口

    导航免费,这一天早该到来了!高德.百度免费之争,其实也是为了抢占生活服务这一最关键的入口,从而获得该战场的翻盘机会. 导航地图免费,实则是生活服务的入口之争.我在08年时就在阿里内部讲过这个事,并建议 ...

  4. 一个CFile::Remove引起的奇怪问题

    今天收到测试的一个反馈,我们的一个程序,在WIN7.WIN8下安装后,运行不起来,在进程列表中可以看到,但就是不出来窗口,同样的程序在XP下正常,在UAC关闭的情况下也正常,在以管理员权限运行时也正常 ...

  5. ubuntu vim 7.4 编译安装

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html 1.到官网 http://www.vim.org/download.p ...

  6. SQL行列转换:报表_公司采购表_每个公司各采购了些什么产品

    有同学问了个比较典型行列转换的问题,想想,解答如下:数据库有一张表: 是个公司采购表,想转化成如下报表,显示每个公司各采购了些什么产品: 哪些公司采购哪些产品是不确定的,所以报表的列有哪几项是不确定的 ...

  7. 在Windows 7下面IIS7的安装和 配置ASP的正确方法

    在Windows 7下如何安装IIS7,以及IIS7在安装过程中的一些需要注意的设置,以及在IIS7下配置ASP的正确方法. 一.进入Windows 7的 控制面板,选择左侧的打开或关闭Windows ...

  8. asp.net 点击按钮,页面没有任何变化,后台代码不触发

    asp.net 点击按钮,页面没有任何变化,后台代码不触发 和可能是 asp.net button  缺少validationGroup 导致的,需要查看页面的validation并且让他们抛出错误信 ...

  9. 禁止指定目录执行php文件

    我们设置网站权限的时候,有些目录不得不设置让http服务器有写入权限,这样安全隐患就来了.比如discuz x2的 data目录,这个必须要有写入限,论坛才能正常运行,但有的黑客可能就会利用这个目录上 ...

  10. ECSHOP 支付宝发货确认接口,记录支付宝返回的交易号

    1,在order_info 数据表尾添加trade_no 字段 数据表尾怎么添加trade_no 字段 ECSHOP为了支付宝发货确认接口,需要记录支付宝返回的交易号 1,在order_info 数据 ...