Hi Dmitry,

thanks for your reply. I read that and in principal that's what I have done 
with my class, I forgot to copy the line with registerEqualsComparator()
But out of frustration after I send the mail, I wrote Qt.doubleVector2D() and 
the error message pointed me to the solution. Qt and QtPositioning in the qml 
context are singeltons which provide functions, which return the respective 
classes, like Qt.vector2D() returns a QVector2D and QtPositioning.coordinate() 
returns a QGeoCoordinate().
I read up the documentation 
(http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterSingletonType-2) for 
qmlRegisterSingletonType() and created a singelton class which has a function 
doubleVector2D(). After registering that class it works :D

Cheers
Immanuel

Am 25.11.2016 09:57:30 schrieb Dmitry Volosnykh <dmitry.volosn...@gmail.com>:
Hello, Immanuel!

I think you have missed this documentation page: 
http://doc.qt.io/qt-5/positioning-cpp-qml.html 
[http://doc.qt.io/qt-5/positioning-cpp-qml.html]

Quote:
Using QGeoCoordinate as an example, the C++ types are directly exposed to the 
QML environment via its meta type:
qRegisterMetaType<QGeoCoordinate>(); 
QMetaType::registerEqualsComparator<QGeoCoordinate>();


Regards,
Dmitry.

On Fri, Nov 25, 2016 at 11:38 AM Immanuel Weber <immanuel.we...@gmail.com 
[mailto:immanuel.we...@gmail.com]> wrote:

Hi all,
I'm trying to expose a class DoubleVector2D which is a Q_GADGET to qml. 
That class looks like this:
class DoubleVector2D
{
Q_GADGET
Q_PROPERTY(double x READ x WRITE setX)
Q_PROPERTY(double y READ y WRITE setY)
public:
DoubleVector2D() {}
DoubleVector2D(double x, double y) : m_x(x), m_y(y) {}
double x() const{ return m_x; }
double y() const { return m_y; }
void setX(double x) { m_x = x; }
void setY(double y) { m_y = y; }
private:
double m_x = 0.0;
double m_y = 0.0;
};
In my main.cpp I register it using 
qRegisterMetaType<DoubleVector2D>("DoubleVector2D");
In a seperate class which is QObject derived I have a function which returns 
such a DoubleVector2D.
Calling that function in my qml file returns the DoubleVector2D, so the class 
works with qml in principal.
However I also need/want to create objects of that class in my qml/js code.
I saw that QtPositioning is using Q_GADGET in the same way for example to 
expose QGeoCoordinate to qml.
There I can write QtPositioning.coordinate() and create an object of that 
class. I examined the source of QtPositioning, however I could not find out how 
this is done. qmlRegisterType() obiously does not work, as it is used to 
register QObject derived classes.
What am I missing here?

Cheers
Immanuel



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

Reply via email to