[Interest] Best way to QObject-wrap simple objects

André Somers andre at familiesomers.nl
Tue Feb 19 14:38:18 CET 2013


Op 19-2-2013 14:19, K. Frank schreef:
> Hello List!
>
> Sometimes I have a simple class, maybe a POD, that I want to
> pump through a queued signal-slot connection.  As I understand
> it, I need a QObject to do that.  So I wrap my class in QObject.
No, you don't. In fact, it is a Bad Idea(TM).
In order to send your POD as a signal/slot argument, it needs to be 
copyable. However, QObject is explicitly *not* copyable.

As Samual already said: use Q_DECLARE_METATYPE instead.

André

>
> What are some good idioms for this?  What is the most parsimonious
> approach?
>
> Here's one method I've used:
>
>
> wrapped_pod.h:
>
>     #include "pod.h"
>     #include <QObject>
>     #include <QMetaType>
>
>     class WrappedPOD : public QObject, public POD {
>        Q_OBJECT
>        public:
>           WrappedPOD() {}
>           WrappedPOD (const WrappedPOD &wp) : POD(wp) {}
>           WrappedPOD (const POD &p) : POD(p) {}
>          ~WrappedPOD() {}
> };
>
>
> (A comment:  I was a little surprised that I seem to need to define
> the constructors.  I would have thought that the c++ defaults would
> have sufficed.)
>
> Any thoughts on other, better ways to achieve this goal?  Or is there
> an approach I can use that avoids wrapping the object in the first place?
>
> I imagine that this is not an uncommon need, so I imagine that there
> is some standard practice I can learn from.
>
>
> Thanks.
>
>
> K. Frank
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest




More information about the Interest mailing list