Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Q_DECLARE_SMART_POINTER_METATYPE type restriction



  • I was investigating the idea of storing an std::shared_ptr<T> in a QVariant. This would allow me to put a shared pointer to my custom data int a QComboBox's data field.
    I'm aware of the existence of QSharedPointer. The data I am working with is only available wrapped into an std::shared_ptr (data provided by a 3rd party component). This leaves me with the choice of either storing raw pointers or registering my own type for the use with QVariant.

    For this, I've been looking at Q_DECLARE_SMART_POINTER_METATYPE. The documentation has the following to say about this macro:

    This macro makes the smart pointer SmartPointer known to QMetaType as a smart pointer. This makes it possible to put an instance of SmartPointer<T> into a QVariant, if T is a type which inherits QObject.
    

    I'd be interested to know why T would be restricted to a type which inherits QObject.
    Can anybody enlighten me?


  • Lifetime Qt Champion

    Hi,

    Pretty good question. I think it something you should bring to the interest mailing list where the Qt developers/maintainers can be found.


  • Lifetime Qt Champion

    From a short look at the code without understanding the whole stuff I would guess that internally there is only a QObject pointer is stored. So it must be a QObject to track the lifetime.


Log in to reply