[SailfishDevel] Accessing C++ properties from QML

John Pietrzak jpietrzak8 at gmail.com
Thu Aug 13 15:47:30 UTC 2015


Actually, I think you're creating a new instance of the FirstPage.qml 
component using this code.  But, Sailfish should have already created 
its own instance of that page when it started up.

You might instead try retrieving a view of the Sailfish instance and 
going from there, something like this:

QQuickView *view = SailfishApp::createView();
QObject *object = view->rootObject();
QObject *label = object->findChild<QObject *>("label");

--John

On 8/13/15 10:51 AM, Antonio Mancini wrote:
> Thanks, actually i had already seen that but couldn't accomplish much, 
> now i tried again and i managed to access and edit qml properties, but 
> the QML object doesn't update.
>
> i use this code in a c++ method
>
>     QQmlEngine engine;
>         QQmlComponent component (&engine,
>     "/usr/share/harbour-pocketmonsters/qml/pages/FirstPage.qml");
>         QObject *object = component.create();
>         QObject *label = object->findChild<QObject*>("label");
>
>         cout << label->property("text").toString();
>
>         if (label)
>             label->setProperty("text", active.name <http://active.name>);
>
>         cout << label->property("text").toString();
>
>
> the output of cout is correct, but the label doesn't update
>
> The console shows these errors, but i think they are irrelevant since 
> the output is correct
>
>     [W] unknown:108 -
>     file:///usr/lib/qt5/qml/Sailfish/Silica/Page.qml:108:
>     ReferenceError: __silica_applicationwindow_instance is not defined
>
>     [W] unknown:94 -
>     file:///usr/lib/qt5/qml/Sailfish/Silica/Page.qml:94:
>     ReferenceError: __silica_applicationwindow_instance is not defined
>
>     [W] unknown:178 -
>     file:///usr/lib/qt5/qml/Sailfish/Silica/Page.qml:178:
>     ReferenceError: __silica_applicationwindow_instance is not defined
>
>     [W] unknown:331 -
>     file:///usr/lib/qt5/qml/Sailfish/Silica/private/PulleyMenuBase.qml:331:
>     ReferenceError: __silica_applicationwindow_instance is not defined
>
>
> 2015-08-13 15:17 GMT+02:00 Andrea Bernabei <and.bernabei at gmail.com 
> <mailto:and.bernabei at gmail.com>>:
>
>     Hi,
>
>     try having a look at this
>     http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html
>
>     2015-08-13 14:14 GMT+01:00 Antonio Mancini <ziobilly94 at gmail.com
>     <mailto:ziobilly94 at gmail.com>>:
>
>         Hi all, i need to access a property of a C++ Class, declared
>         inside another class, from QML.
>
>         This is the principal class:
>
>             #ifndef MANAGER_H
>             #define MANAGER_H
>
>             #include <QObject>
>             #include <QTextStream>
>             #include <QFile>
>             #include "monster.h"
>             #include "move.h"
>             #include "turnmanager.h"
>
>
>             class Manager : public QObject
>             {
>                 Q_OBJECT
>
>             public:
>                 explicit Manager(QObject *parent = 0);
>
>                 int activeId;
>                 QString activeString;
>
>                 int enemyId;
>
>                 Monster active;
>                 Monster enemy;
>
>                 Move activeMove;
>                 Move enemyMove;
>
>                 Q_INVOKABLE void saveActive();
>                 Q_INVOKABLE void fetchMonster( const int &level );
>                 Q_INVOKABLE void assignMoves(Monster &monster );
>                 Q_INVOKABLE void setMove( Move &move, const int &id );
>
>             signals:
>
>                 void fetchMonsterDone();
>
>             public slots:
>
>             };
>
>             #endif // MANAGER_H
>
>
>         this is the Monster Class:
>
>             #ifndef MONSTER_H
>             #define MONSTER_H
>
>             #include <QObject>
>             #include <QString>
>             #include <math.h>
>             #include "move.h"
>
>
>             class Monster : public QObject
>             {
>                 Q_OBJECT
>
>             public:
>
>                 explicit Monster(QObject *parent = 0);
>
>                 ...
>
>                 QString name;
>
>                 ...
>             };
>
>             #endif // MONSTER_H
>
>
>         in my qml page i include the class properly and i have
>         something like this:
>
>             Page {
>
>                 id: page
>
>                 Manager {
>
>                     id: manager
>
>                     onFetchMonsterDone: {
>
>                          console.log("Fetch done")
>                     }
>
>                 }
>
>                 Label {
>
>                     id: label
>
>                 }
>
>             }
>
>
>         after doing some operations with fetchMonster(), the "active"
>         class has been assigned some values to its properties, i need
>         to access these values from QML in the "onFetchMonsterDone",
>         let's say i need to assign to label.text the value of
>         manager.active.name <http://manager.active.name>
>
>         OR
>
>         i read there are some ways to access end edit QML properties
>         from C++
>
>         Can someone help me?
>
>         _______________________________________________
>         SailfishOS.org Devel mailing list
>         To unsubscribe, please send a mail to
>         devel-unsubscribe at lists.sailfishos.org
>         <mailto:devel-unsubscribe at lists.sailfishos.org>
>
>
>
>     _______________________________________________
>     SailfishOS.org Devel mailing list
>     To unsubscribe, please send a mail to
>     devel-unsubscribe at lists.sailfishos.org
>     <mailto:devel-unsubscribe at lists.sailfishos.org>
>
>
>
>
> _______________________________________________
> SailfishOS.org Devel mailing list
> To unsubscribe, please send a mail to devel-unsubscribe at lists.sailfishos.org

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.sailfishos.org/pipermail/devel/attachments/20150813/a3e44ac3/attachment-0001.html>


More information about the Devel mailing list