⚠️ Forum Maintenance: Feb 6th, 8am - 14pm (UTC+2)

Pagestack, push() from within C++

  • Hi,
    I need to push/pop pages on a pagestack within C++.
    I do use the invoke method @QMetaObject::invokeMethod(pageStack, "push", someparameter)@

    In javascript it should be:

    (myPage is an id)
    but in the above c++ invokeMethod I cannot use an id parameter.
    Neither is QVariant-objectName or QString-objectName accepted by push:
    @QMetaObject::invokeMethod: No such method PageStack_QMLTYPE_4::push(QVariant)@


  • Did you try wrapping the argument in Q_ARG(type, value)?

  • Sorry,
    To be precise:
    @QMetaObject::invokeMethod(pageStack, "push", Q_ARG(QString, "instrumentPage"));@

    QMetaObject::invokeMethod: No such method PageStack_QMLTYPE_4::push(QString)
    @QMetaObject::invokeMethod(pageStack, "push", Q_ARG(QObject*, instrumentPage));@

    QMetaObject::invokeMethod: No such method PageStack_QMLTYPE_4::push(QObject*)
    and several more combi's (like QVariant)

  • I guess your only option then is: read the source. Sorry, I don't know how this works exactly either :-)

  • Oh well, my reply completely disappeared after posting...
    Anyhow, I managed to avoid the error messages (push needed 3 args). Stil, it doesn't work.
    One of the so many problems with QML<>C++.
    Thanks for your help.
    I'll put up a more fundamental question: is QML matured enough to port large C++/QT applications to0 C++/QML?

  • The distinction you make isn't correct. QML is still Qt. But if you mean porting a now completely widget-based application to use a QML interface, I guess the answer is: it depends. It depends on your platform, on your needs, on the types of interaction you need to support...

  • Thanks,
    I have put up the general question here: http://qt-project.org/forums/viewthread/16009/

  • You need to call 'push' in such a way:

    QMetaObject::invokeMethod(pageStack, "push", Q_RETURN_ARG(QVariant, retValue),
    Q_ARG(QVariant, QVariant::fromValue(mainPage)), Q_ARG(QVariant, QVariant()), Q_ARG(QVariant, QVariant()));

    i.e. you need to take in account agruments count, which you can see in reference documentation.

  • Thanks.
    I'll have another try. Looks like the documentation has been updated as well.

Log in to reply