struct Data { std::string text; std::vector<Data> tree;}
class MyClass{public: int i; double d; QString str; MyClass();};Q_DECLARE_METATYPE(MyClass); MyClass s; QVariant var; var.setValue(s); // copy s into the variant QByteArray arr; QDataStream out(&arr,QIODevice::WriteOnly); out << *((QVariant*)var); int dataLen = arr.size(); char* data = arr.data(); // передаем dataLen байт ... // принимаем и делаем обратное преобразование QByteArray arr = QByteArray::fromRawData(ptr,dataLen); QDataStream in(&arr,QIODevice::ReadOnly); QVariant val(in); // retrieve the value MyClass s2 = val.value<MyClass>();
C++ (Qt)template <class stream>stream & operator << ( stream & strm, const Data & data ){ strm << data.text << data.tree;} template <class stream>stream & operator >> ( stream & strm, Data & data ){ strm >> data.text >> data.tree;}
C++ (Qt)template <class stream, class vec>stream & operator << ( stream & strm, const vec & data ){ strm << data.size(); for (size_t i = 0; i < data.size(); ++i) strm << data[i];}