如何从共享内存中读取和写入以创建数组QT
How to read and write from shared memory to create an array QT
我尝试了以下操作:
写入
int a[5]={1,2,3,4,5};
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);
out << a[5];
int size = buffer.size();
if (!sharedMemory.create(size)) {
ui.label->setText(tr("Unable to create shared memory segment."));
return;
}
sharedMemory.lock();
char *to = (char*)sharedMemory.data();
const char *from = buffer.data().data();
memcpy(to, from, qMin(sharedMemory.size(), size));
sharedMemory.unlock();
读取
sharedMemory.attach();
QBuffer buffer;
QDataStream in(&buffer);
int a[5];
//QImage image;
QString fileName;
int num;
sharedMemory.lock();
buffer.setData((char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QBuffer::ReadOnly);
in >> a[5];
sharedMemory.unlock();
但我的想法是错误的。我不知道如何读写是一个由字符和整数组成的数组。
这里的第一个实际问题是a[5]
:数组a
只有5个项,因此第5个索引超出了它的边界。要写和读整个数组,您可以1)一次只写一项;或2)与诸如CCD_ 3的向量或列表对象。
1.作为阵列
写入:
int a[5]={1,2,3,4,5};
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);
//write item by item
for (int i=0; i<5; i++) {
out << a[i];
}
int size = buffer.size();
if (!sharedMemory.create(size)) {
cout << "Unable to create shared memory segment: "<<sharedMemory.errorString().toStdString()<<endl;
return;
}
sharedMemory.lock();
char *to = (char*)sharedMemory.data();
const char *from = buffer.data().data();
memcpy(to, from, qMin(sharedMemory.size(), size));
sharedMemory.unlock();
阅读:
sharedMemory.attach();
QBuffer buffer;
QDataStream in(&buffer);
sharedMemory.lock();
buffer.setData((char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QBuffer::ReadOnly);
int len = sharedMemory.size()/sizeof(int);
int* a = new int[len];
for (int i=0; i< len; i++) {
in >> a[i];
}
sharedMemory.unlock();
//delete a;
(注意:使用后不要忘记删除a
。)
2.作为QVector
写入:
QVector<int> vec;
vec << 1<<2<<3<<4<<5;
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);
//write the vector object
out << vec;
int size = buffer.size();
if (!sharedMemory.create(size)) {
cout << "Unable to create shared memory segment: "<<sharedMemory.errorString().toStdString()<<endl;
return;
}
sharedMemory.lock();
char *to = (char*)sharedMemory.data();
const char *from = buffer.data().data();
memcpy(to, from, qMin(sharedMemory.size(), size));
sharedMemory.unlock();
阅读:
sharedMemory.attach();
QBuffer buffer;
QDataStream in(&buffer);
sharedMemory.lock();
buffer.setData((char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QBuffer::ReadOnly);
QVector<int> vec;
in>>vec;
sharedMemory.unlock();
相关文章:
- Qt SQlite无法创建表
- 使用Qt框架在c ++类中创建API调用
- Qt creator 4.11,在应用程序输出面板中创建一个链接
- 无法使用 Visual Studio 2010 和 Qt 版本 4.8.0 创建"Qt Gui Application"
- 我可以使用自定义样板模板创建QT创建项目
- 多个线程,如何正确创建QT小部件
- 如何在不使用透明胶片的情况下创建Qt投影?(因为窗口管理器不支持)
- 如何创建QT标签悬停效应
- 当qt插件在Windows中不起作用时,如何在eclipse cdt中创建qt应用程序
- 错误 C2059:尝试在已知大小的头文件中创建 Qt 容器时为"常量"
- 如何使用命令行 qmake 创建 Qt GUI 或 QML/Qt 快速项目
- C++和QML的对象顺序创建QT
- 无法为 Symbian 设备创建 QT postgresql 插件
- 如何创建 QT 库对话框
- 无法在另一个对话框中创建 Qt 对话框
- 如何使用静态库创建QT控制台应用程序的Single exe,
- 如何创建Qt组合框
- 创建Qt插件和使用非虚拟函数
- 试图创建Qt 4.7 qstring,材料到数组的指针
- 创建qt线程事件循环