It also works if I remove Q_OBJECT from my C++ type:
namespace lib { class MyObject : public QObject { }; } qmlRegisterType<lib::MyObject>("MyLib", 1, 0, "MyObject"); works as expected, but if I add Q_OBJECT in class MyObject : public QObject { }; then it does not work anymore ------- Jean-Michaël Celerier http://www.jcelerier.name On Sun, Oct 7, 2018 at 11:07 PM Jean-Michaël Celerier < jeanmichael.celer...@gmail.com> wrote: > > well, the problem is that createTree() does not registered in your > QObject-derived class. > > but why does it work in the following case then ? > > QtObject { > function createTree() { } > } > > > ------- > Jean-Michaël Celerier > http://www.jcelerier.name > > > On Sun, Oct 7, 2018 at 1:00 PM Vlad Stelmahovsky < > vladstelmahov...@gmail.com> wrote: > >> well, the problem is that createTree() does not registered in your >> QObject-derived class. its a part of instantiated object ant metasystem >> have no clue about it >> >> I think you need to register it 1st in header somehow >> On 10/7/18 12:41 PM, Jean-Michaël Celerier wrote: >> >> Yes, that's what I'm doing, but I 'm typing the code in the mail - sorry >> for the typo. >> >> Here's something even more fundamental : the following prints all the >> functions if my type is a QtObject descendant, but it does not if my type >> is a MyLib.MyObject descendant >> >> for(int i = 0; i < obj->metaObject()->methodCount(); i++) { >> qDebug() << obj->metaObject()->method(i).name(); >> } >> >> >> ------- >> Jean-Michaël Celerier >> http://www.jcelerier.name >> >> >> On Sun, Oct 7, 2018 at 12:39 PM Vlad Stelmahovsky < >> vladstelmahov...@gmail.com> wrote: >> >>> QMetaMethod::invokeMethod(obj, "createTree"); >>> On 10/7/18 12:34 PM, Jean-Michaël Celerier wrote: >>> >>> Hello, >>> I have the following code : >>> >>> Foo.qml : >>> >>> MyLib.MyObject { >>> function createTree() { /* stuff */ } >>> property string host: "ws://whatever.com" >>> } >>> >>> cpp : >>> >>> namespace lib { >>> class MyObject : public QObject { Q_OBJECT }; >>> } >>> ... >>> QQmlComponent c(engine); >>> c.setData("content of Foo.qml", QUrl()); >>> >>> auto obj = c.createObject(); >>> QString host = QQmlProperty(obj, "host").read(); >>> QMetaMethod::invokeMethod("createTree"); >>> >>> Reading the "host" property works fine so the QML object is correctly >>> instantiated. But the invokeMethod call gives me a warning : >>> >>> QMetaObject::invokeMethod: No such method >>> 'lib::MyObject::createTree()' >>> >>> The weird thing being: it works fine if I replace MyLib.MyObject with >>> QtObject on the QML side. >>> Of course I want to use some additional methods present in MyObject so >>> this is not a solution. >>> >>> Anyone knows what is going on here ? >>> >>> Thanks, >>> Jean-Michaël Celerier >>> >>> >>> >>> >>> >>> ------- >>> Jean-Michaël Celerier >>> http://www.jcelerier.name >>> >>> _______________________________________________ >>> Interest mailing >>> listInterest@qt-project.orghttp://lists.qt-project.org/mailman/listinfo/interest >>> >>> _______________________________________________ >>> Interest mailing list >>> Interest@qt-project.org >>> http://lists.qt-project.org/mailman/listinfo/interest >>> >>
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest