[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