是否有QT C 数据容器可用于动态大小结构

Is there a Qt C++ data container to use in dynamic size structs?

本文关键字:动态 用于 结构 QT 数据 是否      更新时间:2023-10-16

我认为社区应该确定和解决这个问题,但似乎我正在使用错误的关键字搜索,或者真的很难以捉摸。

问题很简单。我想定义一个结构,其中应定义动态数据容器(向量,列表,队列,任何作品)。

 #pragma pack(1)
 struct Example
 {
    int foo;
    QVector<int> bar;
 };

我需要将整数值插入此向量(或使用任何其他QT/STL容器),并且我想将该结构的内容复制到字节数组,以便将其原始数据写入文件。

我遇到的是,当我编写以下代码时:

Example exstr;
qDebug()<<sizeof(exstr);
exstr.bar.push_back(12);
exstr.bar.push_back(5);
qDebug()<<sizeof(exstr);

它显示值:

8
8

现在,这可能是因为QVector只是一个普通的指针,它指向连续数据,但我需要的是动态可重复可重复的数据容器(这也可以调整其所在的结构大小),并允许我使用内容字节。当我尝试序列化时字节。

感谢提前的帮助。

QDATASTREAM 允许您序列化某些QT数据类型:序列化QT数据类型

QDataStream stream(&file);   // we will serialize the data into the file
stream << your_qvector_obj;
//...
QVector<int> new_vec;
stream >> new_vec;
//...

您在QVector的正确轨道上。STL矢量类也将起作用。这两个类都可以保证将其值存储在连续的内存中。

对于qVector,您需要这样的东西:

memcpy (dest, bar.data(), bar.count () * sizeof (int));

对于stl矢量,您要获取第一个元素的地址:

memcpy (dest, &bar[0], bar.size () * sizeof (int));

在这两种情况下," dest"必须足够大才能保存要复制的数据。我正在以此为例以复制为例;如果您只需要指向数据的指针,则qVector ::数据为STL向量提供了第一个元素的地址提供。