[Interest] QVariant cannot take custom type

Aekold Helbrass helbrass at gmail.com
Fri Apr 5 15:33:41 CEST 2013


Wow, that works! Thank you! Was the declaration the main thing that was
missing?

As for why I want to do this, I have a plan for application with quite
complex object tree, that will be stored in JSON. Classes structure will be
quite simple, only strings and integers. And writing the parsing logic for
that JSON will be quite a big pile of boilerplate code, and will be hard to
change the structure. So I want to do something similar to Java Gson and
JAXB, when you know only JSON data and root class, and using QMetaObject
structure it will parse the file automatically. And this concrete issue
stopped me when I got to parsing JSON arrays, simple objects are parsed
without any problems.

Once again than you!


On Fri, Apr 5, 2013 at 4:10 PM, Pritam Ghanghas <Pritam_Ghanghas at infosys.com
> wrote:

> working main.cpp is attached. I am not sure why you want to do this.
> ________________________________
> From: Aekold Helbrass [helbrass at gmail.com]
> Sent: Friday, April 05, 2013 5:59 PM
> To: Pritam Ghanghas
> Cc: Qt-interest Interest
> Subject: Re: [Interest] QVariant cannot take custom type
>
> Complete QtCreator project in attachment. I'm running it on QtCreator
> 2.7.0 and Qt 5.0.1, SUSE Linux 12.3.
>
>
> On Fri, Apr 5, 2013 at 2:30 PM, Pritam Ghanghas <
> Pritam_Ghanghas at infosys.com<mailto:Pritam_Ghanghas at infosys.com>> wrote:
> can you send compilable code that reproduces this problem. I will try here.
> ________________________________
> From: interest-bounces+pritam_ghanghas=infosys.com at qt-project.org<mailto:
> infosys.com at qt-project.org> [interest-bounces+pritam_ghanghas=
> infosys.com at qt-project.org<mailto:infosys.com at qt-project.org>] on behalf
> of Aekold Helbrass [helbrass at gmail.com<mailto:helbrass at gmail.com>]
> Sent: Friday, April 05, 2013 4:45 PM
> To: Qt-interest Interest
> Subject: Re: [Interest] QVariant cannot take custom type
>
> Ok, I've tried this one:
>
>         QVariant var(QMetaType::QObjectStar, &item);
>
>
> and it almost works. Pointer somehow gets crippled after using
> QMetaProperty.write. When Item* is created originally - address is
> 0x1b952fo. But into Holder it is written as 0x1b95480.
>
> Is is even possible? Maybe I'm constructing QMetaProperty not as
> intended?...
>
>
> On Fri, Apr 5, 2013 at 2:00 PM, Pritam Ghanghas <
> Pritam_Ghanghas at infosys.com<mailto:Pritam_Ghanghas at infosys.com><mailto:
> Pritam_Ghanghas at infosys.com<mailto:Pritam_Ghanghas at infosys.com>>> wrote:
> use gdb and see where exactly it segfaults. That will give better pointers
> than random guesses.
> You can try posting backtrace here.
> ________________________________
> From: interest-bounces+pritam_ghanghas=infosys.com at qt-project.org<mailto:
> infosys.com at qt-project.org><mailto:infosys.com at qt-project.org<mailto:
> infosys.com at qt-project.org>> [interest-bounces+pritam_ghanghas=
> infosys.com at qt-project.org<mailto:infosys.com at qt-project.org><mailto:
> infosys.com at qt-project.org<mailto:infosys.com at qt-project.org>>] on behalf
> of Aekold Helbrass [helbrass at gmail.com<mailto:helbrass at gmail.com><mailto:
> helbrass at gmail.com<mailto:helbrass at gmail.com>>]
> Sent: Friday, April 05, 2013 4:15 PM
> To: Conti Manuele
> Cc: Qt-interest Interest
> Subject: Re: [Interest] QVariant cannot take custom type
>
> Thanx, that one was close, but still segfault:
>
>         QSharedPointer<Item> pointer(item);
>
>         QVariant var = QVariant::fromValue(pointer);
>
>         list.append(var);
>
>
>
> On Fri, Apr 5, 2013 at 1:33 PM, Conti Manuele <conti.ma at alice.it<mailto:
> conti.ma at alice.it><mailto:conti.ma at alice.it<mailto:conti.ma at alice.it
> >><mailto:conti.ma at alice.it<mailto:conti.ma at alice.it><mailto:
> conti.ma at alice.it<mailto:conti.ma at alice.it>>>> wrote:
> Hi All,
> There is a problem in your code, actually I use this and work perfectly:
> Q_DECLARE_METATYPE(QSharedPointer<QPlcServerSocket::QExternalCommand>)
> qRegisterMetaType< QSharedPointer<QPlcServerSocket::QExternalCommand> >();
>
>
> Bye
>
> On 04/05/2013 12:27 PM, Samuel Gaist wrote:
> > He explains how to handle QObject * so a pointer to QObject instance,
> not a QObject instance.
> >
> > On 5 avr. 2013, at 12:22, Aekold Helbrass wrote:
> >
> >> So, it is absolutely impossible to use QObject-derived class with
> QVariant? I'm storing QList of pointers already, and I want to write that
> with QMetaProperty. The only thing that needs copy-constructor, in my
> understanding, is qRegisterMetaType invocation.
> >>
> >> I even read an article where guy explains how to get other types than
> one you're storing, so it looks like there is no problem in storing QObject
> in QVariant, but for some reason it doesn't work for me:
> >>
> http://steveire.wordpress.com/2011/03/16/implementing-qvariantqmetatype-features-with-template-tricks/
> >>
> >>
> >> On Fri, Apr 5, 2013 at 12:44 PM, André Somers <andre at familiesomers.nl
> <mailto:andre at familiesomers.nl><mailto:andre at familiesomers.nl<mailto:
> andre at familiesomers.nl>><mailto:andre at familiesomers.nl<mailto:
> andre at familiesomers.nl><mailto:andre at familiesomers.nl<mailto:
> andre at familiesomers.nl>>>> wrote:
> >> Op 5-4-2013 11:39, Sven Bergner schreef:
> >>> Hello,
> >>> you can use a custom type with QVariant by declaring it
> >>> using Q_DECLARE_METATYPE ( Type ).
> >>> Hope that helps.
> >>>
> >> It does not. That was already in the code posted in the opening post. As
> >> noted by others, the issue lies with trying to use a QObject derived
> >> class here.
> >>
> >> André
> >>
> >> --
> >> You like Qt?
> >> I am looking for collegues to join me at i-Optics!
> >>
> >> _______________________________________________
> >> Interest mailing list
> >> Interest at qt-project.org<mailto:Interest at qt-project.org><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org>><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org>>>
> >> http://lists.qt-project.org/mailman/listinfo/interest
> >>
> >> _______________________________________________
> >> Interest mailing list
> >> Interest at qt-project.org<mailto:Interest at qt-project.org><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org>><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org>>>
> >> http://lists.qt-project.org/mailman/listinfo/interest
> > _______________________________________________
> > Interest mailing list
> > Interest at qt-project.org<mailto:Interest at qt-project.org><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org>><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org>>>
> > http://lists.qt-project.org/mailman/listinfo/interest
> >
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org<mailto:Interest at qt-project.org><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org>><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org><mailto:
> Interest at qt-project.org<mailto:Interest at qt-project.org>>>
> http://lists.qt-project.org/mailman/listinfo/interest
>
>
> **************** CAUTION - Disclaimer *****************
> This e-mail contains PRIVILEGED AND CONFIDENTIAL INFORMATION intended
> solely
> for the use of the addressee(s). If you are not the intended recipient,
> please
> notify the sender by e-mail and delete the original message. Further, you
> are not
> to copy, disclose, or distribute this e-mail or its contents to any other
> person and
> any such actions are unlawful. This e-mail may contain viruses. Infosys
> has taken
> every reasonable precaution to minimize this risk, but is not liable for
> any damage
> you may sustain as a result of any virus in this e-mail. You should carry
> out your
> own virus checks before opening the e-mail or attachment. Infosys reserves
> the
> right to monitor and review the content of all messages sent to or from
> this e-mail
> address. Messages sent to or from this e-mail address may be stored on the
> Infosys e-mail system.
> ***INFOSYS******** End of Disclaimer ********INFOSYS***
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20130405/c6460bb5/attachment.html>


More information about the Interest mailing list