qbytearray初始化时出现问题问题,太诡异了,有人知道什么原因不

QByteArray储存二进制数据(包括结构体,自定义QT对象) - 云淡风清 - ITeye博客
博客分类:
因为利用QByteArray可以很方便的利用其API对内存数据进行访问和修改, 构建数据库blob字段时必不可少; 那如何向blob内写入自定义的结构体和类
1. 利用memcpy拷贝内存数据
//自定义person结构体
typedef struct
char name[20];
//向QByteArray写入多个结构体
void writeStruct()
ba.resize(2*sizeof(Person)); //设置容量
for(int i=0;i&2;i++)
Person p1;
p1.age=10+i;
strcpy(p1.name,"javaeye");
memcpy(ba.data()+i*sizeof(Person),&p1,sizeof(Person)); //指针移动,写入多个数据
//还原数据
Person *person=(Person*)ba.data();
qDebug()&&person-&age&&"---"&&person-&
qDebug()&&person-&age&&"---"&&person-&
memcpy只能处理字段为基本类型的结构体, 当使用QString name, 我用person-&name去访问其值, 程序崩溃; 由此可见,内存数据无法还原构建成QString类. 如果要写入自定的QT类, 只能借助QBuffer了, 通过二进制流写入
2. QBuffer写入QT自定义结构体
//QBuffer序列化自定义对象
typedef struct
*@brief 重载自定义对象的输入
inline QDataStream &operator&&(QDataStream &out,const QPerson &per)
out&&per.age&&per.
*@brief 重载自定义对象的输出
inline QDataStream &operator&&(QDataStream &in,QPerson &per)
* @brief QBuffer能处理QT自定义类型
void testQBuffer()
ba.resize(2*sizeof(QPerson));
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
QDataStream out(&buffer);
for(int i=0;i&2;i++)
per.age=20+i;
per.name=QString("sun_%1").arg(i+1);
buffer.close();
QBuffer buf(&ba);
buf.open(QIODevice::ReadOnly);
QDataStream in(&buf);
for(int i=0;i&2;i++)
qDebug()&&per.age&&"---"&&per.
buf.close();
浏览 14354
经常看看您的帖子,把它当成教科书,范本来学习。谢谢,也就平时遇到一些问题,作下笔记了。希望不要误导大家
浏览: 295091 次
来自: 深圳
陈宇飞 写道reset()为什么不可以用了,版本低了,还是头文 ...
reset()为什么不可以用了,版本低了,还是头文件呢
环形缓冲区类(C++源码)绝对可用.....转到你网易的微博上 ...
tadpole_java 写道经常看看您的帖子,把它当成教科书 ...}

我要回帖

更多关于 邮箱初始化遇到问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信