Ok, I have just tested using the following code:
std::cout << ">>> Unknown type!?" << std::endl;
} else {
QList<int> data = QList<int>() << 3 << 5 << 7;
QList<int> readData = QList<int>();
QMetaType::load(readDataStream, id,
&readData
);
bool error = false;
if (data.size() != readData.size()) {
std::cout << ">>> data.size() != readData.size()" << std::endl;
std::cout << " " << data.size() << " vs. " << readData.size() << std::endl;
error = true;
} else {
for (int i = 0, iMax = data.size(); i < iMax; ++i)
if (data[i] != readData[i]) {
std::cout << ">>> data[" << i << "] != readData[" << i << "]" << std::endl;
std::cout << " " << data[i] << " vs. " << readData[i] << std::endl;
error = true;
break;
}
}
if (!error)
std::cout << ">>> Everything went fine..." << std::endl;
}
int id = QMetaType::type("QList<int>");
if (id == QMetaType::UnknownType) {
std::cout << ">>> Unknown type!?" << std::endl;
} else {
QList<int> data = QList<int>() << 3 << 5 << 7;
QList<int> readData = QList<int>();
QByteArray byteArray;
QDataStream dataStream(&byteArray, QIODevice::WriteOnly);
QDataStream readDataStream(&byteArray, QIODevice::ReadOnly);
QMetaType::save(dataStream, id, &data);
QMetaType::load(readDataStream, id, &readData);
bool error = false;
if (data.size() != readData.size()) {
std::cout << ">>> data.size() != readData.size()" << std::endl;
std::cout << " " << data.size() << " vs. " << readData.size() << std::endl;
error = true;
} else {
for (int i = 0, iMax = data.size(); i < iMax; ++i)
if (data[i] != readData[i]) {
std::cout << ">>> data[" << i << "] != readData[" << i << "]" << std::endl;
std::cout << " " << data[i] << " vs. " << readData[i] << std::endl;
error = true;
break;
}
}
if (!error)
std::cout << ">>> Everything went fine..." << std::endl;
}
To copy to clipboard, switch view to plain text mode
and I got:
>>> Everything went fine...
on Windows, OS X and Linux. So, as far as I can tell, QMetaType::save/load works fine for my QList<int> type.
Bookmarks