Hi,

you've hit one of the issues we did with exposing C++ and QML APIs. Namely, QQmlListProperty. This thing should ideally never have existed and instead support for properties of collections should have been added to QObject and the metaobject system.

To avoid pulling in a QtQml dependency in the C++ API, we instead have another layer to add the QML specifics (pretty much entirely list properties).

In order to create these from code we have a factory. Try something like:

QAbstractNodeFactory::createNode<QEntity>("QEntity")

If using just C++ you will get a standard QEntity. If using QML (and the types are registered with the factory) you will get the QML -enhanced version with the extension object that handles the list properties.

We use this for e.g. in the renderer's SkeletonLoader class to create QJoints for the frontend tree.

Cheers,

Sean

On 19/10/2017 16:40, Xavier Bigand wrote:
The issue is that QEntity doesn't reflect directly the qml type Entity,
this is the same for many Qt3D classes.

Here is the declaration of QEntity from qentity.h

class QT3DCORESHARED_EXPORT QEntity : public QNode

{

Q_OBJECT

public:

explicit QEntity(QNode *parent = nullptr);

virtual ~QEntity();


QComponentVector components() const;


void addComponent(QComponent *comp);

void removeComponent(QComponent *comp);


QEntity *parentEntity() const;


protected:

explicit QEntity(QEntityPrivate &dd, QNode *parent = nullptr);


private:

Q_DECLARE_PRIVATE(QEntity)


QNodeCreatedChangeBasePtr createNodeCreationChange() const Q_DECL_OVERRIDE;

};



As you can see the method addComponent is not virtual and exported as 
Q_PROPERTY, so when creating a derived class of QEntity when instanced in qml 
it doesn't inherited of Entity properties.




2017-10-19 15:44 GMT+02:00 Jason H <jh...@gmx.com <mailto:jh...@gmx.com>>:

    > I am looking for a way to manage an Entity tree in C++ and the Scene 
configuration in QML. My C++ code manage entities from a root node and I want to 
move the Frame graph and camera management,... to qml.
    > I can't figure out how to do that because if create a class that derive from 
QEntity some properties of Entity aren't declared like "components".
    >
    > My goal is to have an object hierarchy made with QEntity in c++ and 
dynamic views on it made in QML. Scene views should be dockable,...


    This is well-documented. QEntity inherits from QObject so you are
    good. I'm not sure what you mean by "like components". Public
    properties, signals and slots are visible to QML. If not it's a
    simple matter of wrapping them in a public one.

    http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html
    <http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html>






--
Xavier


_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest


--
Dr Sean Harmer | sean.har...@kdab.com | Managing Director UK
KDAB (UK) Ltd, a KDAB Group company
Tel. +44 (0)1625 809908; Sweden (HQ) +46-563-540090
Mobile: +44 (0)7545 140604
KDAB - Qt Experts
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to