Qt QSharedMemory、信号和QBuffer

Qt QSharedMemory、信号和QBuffer,qt,qt4,Qt,Qt4,我试图在写入QSharedMemory时获取信号。我试过几次,方法如下: QSharedMemory *sm = new QSharedMemory("key", this); QByteArray *ba; QBuffer *buff; if(sm->create(1024)) { ba = new QByteArray(); ba->setRawData((char*)sm->data(), sm->size()); buff = new QB

我试图在写入
QSharedMemory
时获取信号。我试过几次,方法如下:

QSharedMemory *sm = new QSharedMemory("key", this);
QByteArray *ba;
QBuffer *buff;
if(sm->create(1024))
{
    ba = new QByteArray();
    ba->setRawData((char*)sm->data(), sm->size());
    buff = new QBuffer(ba, this);
    connect(buff, SIGNAL(readyRead()), this, SLOT(bufferReadyRead()));

    memset(sm->data(), NULL, sm->size());
    QByteArray response = myDomDoc.toByteArray();

    sm->lock();
    buff->open(QIODevice::ReadWrite);
    memcpy((char*)sm->data(), response.data(), sm->size()-1);
    buff->close();
    /****Here I want the QBuffer's readyRead() signal to emit ****/
    sm->unlock();
}
我的尝试可能有点扭曲,但我希望你能理解。我正在尝试将
QBuffer
包装在
QSharedMemory
数据周围,这样当有人写入
QSharedMemory
时,我就可以得到一个信号

这是一个好方法吗?有更好的方法吗?如果不是,在写入my
QSharedMemory
时获取信号的最佳方式是什么

我认为问题在于,只要我写入共享内存数据,QByteArray就会在写入时实现一个拷贝,因此
QBuffer
不会检测到写入其数据的内容

我说得对吗


致以最诚挚的问候。

这行不通
QBuffer
只是
QByteArray
的包装。它不跟踪底层字节数组的外部更改。只有当缓冲区本身在其他地方更改时,它才会发出
readyRead
信号。从QT文档中,我可以看出是什么让您相信QBuffer和QSharedMemory可能在某种程度上起作用。我的直觉是,QIODevice只打算为套接字/管道/本地套接字之类的东西发出readyRead,用于附加新数据时,而不是修改数据时。如果您使用多个线程,那么您可以使用条件变量进行同步/通知。另一种可能包括发送一个关于更新的小通知(使用本地套接字,甚至UDP)到共享内存存储库中。我想我必须放弃这种方式。