у вас проблема в том, что readNextStartElement возвращает false, когда найден закрывающий тэг, а вы это никак не проверяете. т.е. надо в условии reader->name() == "..." Добавить && reader->isStartElement() например
если именно в такой формулировке, варианты: QSharedMemory Class boost::interprocess ну и классика mmap или shmget( но лучше не трогать) —- но работа с этим для классификации разработчика "выше среднего"