QVariant is not working for user defined datatype
Unsolved
General and Desktop
-
Hello There,
I am facing difficulty with QVariant class. I've defined a sub class of QDateTime and trying to assign it to QVariant and read back. Q_DECLARE_METATYPE(myClass) and qRegisterMetaType declarations are in place still QVariant is not getting initialized with my defined class. Please suggest what is wrong here.
#include <QCoreApplication> #include <QDateTime> #include <QVariant> #include <qdebug.h> class myClass:public QDateTime { }; Q_DECLARE_METATYPE(myClass) int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qRegisterMetaType<myClass>("myClass"); myClass mc; mc.setDate (QDateTime::currentDateTime().date ()); mc.setTime (QDateTime::currentDateTime() .time ()); qDebug() << mc.date().day () << mc.date().month() << mc.date().year () ; QVariant vc; vc.setValue (mc); myClass dateTime = vc.value<myClass>(); qDebug() << dateTime.date().day () << dateTime.date().month() << dateTime.date().year () ; return a.exec(); }
-
@narinder83 said in QVariant is not working for user defined datatype:
myClass dateTime = vc.value<myClass>();
it might just be a problem of the default copy constructor. try defining it.
class myClass : public QDateTime { public: myClass() = default; ~myClass() = default; myClass(myClass&& other) :QDateTime(static_cast<QDateTime&&>(other)) {} myClass(const myClass& other) :QDateTime(static_cast<const QDateTime&>(other)) {} myClass& operator=(const myClass& other){ QDateTime::operator=(static_cast<const QDateTime&>(other)); return *this; } myClass& operator=(myClass&& other){ QDateTime::operator=(static_cast<QDateTime&&>(other)); return *this; } };