I am experiencing with the new QQuickWidget. How can I interact between the QQuickWidget and C++?
C++
QQuickWidget *view = new QQuickWidget();
view->setSource(QUrl::fromLocalFile("myqml.qml"));
view->setProperty("test", 0);
myLayout->addWidget(view);
QML
import QtQuick 2.1
Rectangle {
    id: mainWindow
    width: parent.width
    height: parent.height
    Text {
        id: text
        width: mainWindow.width
        font.pixelSize: 20
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        text: test
    }
}
text: test does not work: ReferenceError: test is not defined
How can I give my QML file some properties via C++?
Is it also possible to get the Text object in C++ and update its text?
Give it a try:
view->rootContext()->setContextProperty("test", "some random text");
instead of
view->setProperty("test", 0);
setProperty(name, val) works if object has the property name defined as Q_PROPERTY.
It is possible to pass QObject-derived object as view's context property:
class Controller : public QObject
{
    Q_OBJECT
    QString m_test;
public:
    explicit Controller(QObject *parent = 0);
    Q_PROPERTY(QString test READ test WRITE setTest NOTIFY testChanged)
    QDate test() const
    {
        return m_test;
    }
signals:
    void testChanged(QString arg);
public slots:
    void setTest(QDate arg)
    {
        if (m_test != arg) {
            m_test = arg;
            emit testChanged(arg);
        }
    }
};
Controller c;
view->rootContext()->setContextProperty("controller", &c);
Text {
        id: text
        width: mainWindow.width
        font.pixelSize: 20
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        text: controller.test
    }
Is it also possible to get the Text object in C++ and update its text?
In general, it doesn't seem to be the best approach -- c++ code shouldn't be aware of presentation if it follows model-view pattern.
However it is possible as described here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With