void Variant::xmlWrite(QDomDocument& doc, QDomNode& node) const { QDomElement elem = createEmptyElement(doc, typeName(type())); if (isBuiltIn()) VariantBase::xmlWrite(doc, elem); else variantData()->xmlWrite(doc, elem); }
int main(int, char *[]) { Data data; data.setString("Hello World"); data.setValue(42); QTemporaryFile file; if (!file.open()) { qDebug() << "Temp file opening failed."; return EXIT_FAILURE; } QDataStream stream(&file); // If a custom type is searilzed using QVariant, // serialization operators need to be provided #ifdef USE_VARIANT qRegisterMetaTypeStreamOperators<Data>("Data"); QVariant variantData(QVariant::fromValue(data)); stream << variantData; #else stream << data; #endif file.reset(); // Serialize from the file Data dataFromFile; #ifdef USE_VARIANT QVariant variantFromFile; stream >> variantFromFile; dataFromFile.setString(variantFromFile.value<Data>().string()); dataFromFile.setValue(variantFromFile.value<Data>().value()); #else stream >> dataFromFile; #endif qDebug() << dataFromFile.string(); qDebug() << dataFromFile.value(); file.close(); return EXIT_SUCCESS; }
Variant::operator QString() const { if (is(nString)) return *static_cast<const VString*>(variantData()); return QString(); }
Variant::operator double() const { if (is(nLongReal)) return *static_cast<const LongReal*>(variantData()); return 0; }
Variant::operator cfloatnum() const { if (is(nLongReal)) return *static_cast<const LongReal*>(variantData()); return LongReal::NaN(); }
void Variant::teardown() { if (!isBuiltIn()) variantData()->release(); }
VariantType Variant::type() const { if (isBuiltIn()) return VariantBase::type(); return variantData()->type(); }