QML declare new types
-
Hi,
I'm having some issues trying to declare a new type in qml.
I have a class which contains a shared pointer to a second class.
class Grid : public QObject { Q_OBJECT ... } Class FObject : public QObject { Q_OBJECT public: std::shared_ptr<const Grid> grid() const; protected: std::shared_ptr<Grid> m_grid; }
and a third class which uses the grid
class GridGeometry : public Qt3DRender::QGeometry { Q_OBJECT Q_PROPERTY(const Grid *grid READ grid WRITE setGrid NOTIFY gridChanged) public: const Grid *grid() const; void setGrid(const Grid *grid); signals: void gridChanged(const Grid *grid); protected: const Grid *m_grid; }
When the FObject is created, it creates a new Grid that will be unique in that FObject and there is no way to change it. Both FObject and Grid doesn't have a default constructor.
Im trying to expose this in QML so I can do
Entity { id: gridId GridGeometry { grid: _grid } components:[ ColorMapMaterial { } ] Component.onCompleted: console.log(_grid) }
Where
qmlRegisterType<GridGeometry>("com.mslab.kaseo", 1, 0, "GridGeometry"); qmlRegisterUncreatableType<Grid>("com.mslab.kaseo", 1, 0, "Grid", "Grid is not instantiable"); QGuiApplication app(argc, argv); std::array<float, 4> aabb{0,10,0,10}; FracturableObject obj(aabb, 512); QQuickView view; view.resize(500, 500); view.setResizeMode(QQuickView::SizeRootObjectToView); const Grid *grid = obj.grid().get(); view.rootContext()->setContextProperty("_grid", grid); //view.rootContext()->setContextProperty("_grid", obj.grid().get()); view.setSource(QUrl("qrc:/main.qml")); view.show();
But when I try to assign the grid property in the GridGeometry class I get the following error:
qrc:/Scene.qml:40:19: Unable to assign bool to [unknown property type] qrc:/Scene.qml: 40I'm new in QML so I don't know what I'm doing wrong. I have read the documentation but I' not capable os solving this issue. Any ideas?
The main purpose if to generate a Qt3D scene and assign the data through QML (Grid is a class which contains values at the points that will be rendered using the GridGeometry, derived from Qt3DRender::QGeometry)