PDA

View Full Version : Store QVector to QDataStream problem



ruben.rodrigues
2nd August 2010, 06:52
hi all!

I need to store a QVector to send it via tcp/ip and then store it in a mysql database as a BLOB. I am getting an error and don't know how to handle it.

this 2 function store and restore QVectors from a QByteArray.


QByteArray EViewer::netArraySerialisation()
{
QByteArray dataBlock;

QDataStream dataStream(&dataBlock, QIODevice::WriteOnly);
dataStream.setVersion(QDataStream::Qt_4_5);

dataStream << _NetArray;

return dataBlock;
}

void EViewer::netArrayDeserialisation(QByteArray qb)
{
// create data block and related stream
QByteArray dataBlock = qb;

QDataStream dataStream(&dataBlock, QIODevice::ReadOnly);
dataStream.setVersion(QDataStream::Qt_4_5);

dataStream >> _NetArray;
}

Error:


src/srcFrw/DataObjects/EViewer.cpp:167: instantiated from here
/usr/include/qt4/QtCore/qdatastream.h:292: error: no match for ‘operator>>’ in ‘s >> t’
/usr/include/qt4/QtCore/qdatastream.h:132: note: candidates are: QDataStream& QDataStream::operator>>(qint8&)
/usr/include/qt4/QtCore/qdatastream.h:206: note: QDataStream& QDataStream::operator>>(quint8&)
/usr/include/qt4/QtCore/qdatastream.h:134: note: QDataStream& QDataStream::operator>>(qint16&)
/usr/include/qt4/QtCore/qdatastream.h:209: note: QDataStream& QDataStream::operator>>(quint16&)
/usr/include/qt4/QtCore/qdatastream.h:136: note: QDataStream& QDataStream::operator>>(qint32&)
/usr/include/qt4/QtCore/qdatastream.h:212: note: QDataStream& QDataStream::operator>>(quint32&)
/usr/include/qt4/QtCore/qdatastream.h:138: note: QDataStream& QDataStream::operator>>(qint64&)
/usr/include/qt4/QtCore/qdatastream.h:215: note: QDataStream& QDataStream::operator>>(quint64&)
/usr/include/qt4/QtCore/qdatastream.h:141: note: QDataStream& QDataStream::operator>>(bool&)
/usr/include/qt4/QtCore/qdatastream.h:142: note: QDataStream& QDataStream::operator>>(float&)
/usr/include/qt4/QtCore/qdatastream.h:143: note: QDataStream& QDataStream::operator>>(double&)
/usr/include/qt4/QtCore/qdatastream.h:144: note: QDataStream& QDataStream::operator>>(char*&)
/usr/include/qt4/QtCore/qchar.h:390: note: QDataStream& operator>>(QDataStream&, QChar&)
/usr/include/qt4/QtCore/qbytearray.h:570: note: QDataStream& operator>>(QDataStream&, QByteArray&)
/usr/include/qt4/QtCore/qstring.h:1063: note: QDataStream& operator>>(QDataStream&, QString&)
/usr/include/qt4/QtCore/qregexp.h:146: note: QDataStream& operator>>(QDataStream&, QRegExp&)
/usr/include/qt4/QtCore/qstringlist.h:245: note: QDataStream& operator>>(QDataStream&, QStringList&)
/usr/include/qt4/QtCore/qlocale.h:671: note: QDataStream& operator>>(QDataStream&, QLocale&)
/usr/include/qt4/QtCore/qtextstream.h:286: note: QTextStream& operator>>(QTextStream&, QTextStream& (*)(QTextStream&))
/usr/include/qt4/QtCore/qvariant.h:498: note: QDataStream& operator>>(QDataStream&, QVariant&)
/usr/include/qt4/QtCore/qvariant.h:500: note: QDataStream& operator>>(QDataStream&, QVariant::Type&)
/usr/include/qt4/QtCore/qurl.h:270: note: QDataStream& operator>>(QDataStream&, QUrl&)
/usr/include/qt4/QtCore/quuid.h:183: note: QDataStream& operator>>(QDataStream&, QUuid&)
/usr/include/qt4/QtCore/qbitarray.h:164: note: QDataStream& operator>>(QDataStream&, QBitArray&)
/usr/include/qt4/QtCore/qdatetime.h:316: note: QDataStream& operator>>(QDataStream&, QDate&)
/usr/include/qt4/QtCore/qdatetime.h:318: note: QDataStream& operator>>(QDataStream&, QTime&)
/usr/include/qt4/QtCore/qdatetime.h:320: note: QDataStream& operator>>(QDataStream&, QDateTime&)
/usr/include/qt4/QtCore/qpoint.h:104: note: QDataStream& operator>>(QDataStream&, QPoint&)
/usr/include/qt4/QtCore/qpoint.h:236: note: QDataStream& operator>>(QDataStream&, QPointF&)
/usr/include/qt4/QtCore/qline.h:206: note: QDataStream& operator>>(QDataStream&, QLine&)
/usr/include/qt4/QtCore/qline.h:417: note: QDataStream& operator>>(QDataStream&, QLineF&)
/usr/include/qt4/QtCore/qsize.h:102: note: QDataStream& operator>>(QDataStream&, QSize&)
/usr/include/qt4/QtCore/qsize.h:253: note: QDataStream& operator>>(QDataStream&, QSizeF&)
/usr/include/qt4/QtCore/qrect.h:200: note: QDataStream& operator>>(QDataStream&, QRect&)
/usr/include/qt4/QtCore/qrect.h:622: note: QDataStream& operator>>(QDataStream&, QRectF&)
make[1]: *** [debug/EViewer.o] Error 1
make: *** [debug] Error 2

Is there a standard way to convert QVectors?

ChrisW67
2nd August 2010, 09:27
If the value objects stored in your QVector implement operator<<() and operator>>() as described in the docs then QVector looks after it for you. If they don't implement the QDataStream support operators (as yours seem not to) then you need to do it manually.

If you need to do it manually then write an element count, and then serialise each item in turn.