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

How to create a QList<QGraphicsItem>



  • It would help me a lot if i could do tis, but it gives me an error if i try to


  • Lifetime Qt Champion

    Hi,

    What are you doing ?
    What errors do you get ?



  • hi,

    QList<QGraphicsItem> list;
    

    in the code it doesn't show any error, but in the compiler it says
    "ivalid abstract return type 'QGraphicsItem'"


  • Lifetime Qt Champion

    Hi
    Should that not be
    QList<QGraphicsItem *>
    so its a list of pointers to QGraphicsItem's
    also the scene has such list already. (just in case)
    https://doc.qt.io/qt-5/qgraphicsscene.html#items



  • QList will call follow code to create object:

    template <typename T>
    Q_INLINE_TEMPLATE void QList<T>::node_construct(Node *n, const T &t)
    {
        if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) n->v = new T(t);
        else if (QTypeInfo<T>::isComplex) new (n) T(t);
    #if (defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__IBMCPP__)) && !defined(__OPTIMIZE__)
        // This violates pointer aliasing rules, but it is known to be safe (and silent)
        // in unoptimized GCC builds (-fno-strict-aliasing). The other compilers which
        // set the same define are assumed to be safe.
        else *reinterpret_cast<T*>(n) = t;
    #else
        // This is always safe, but penaltizes unoptimized builds a lot.
        else ::memcpy(n, static_cast<const void *>(&t), sizeof(T));
    #endif
    }
    

    But QGraphicsItem is a abstract class, See, boundingRect(), paint(), that causes compilation to failed.


Log in to reply