I'm new to Qt and I'm trying to modify a QML Text (showed in the screen) from the C++ code. I get the text modified but it is not updated on the screen, so I have the text variable modified but the first text on the screen.
Here is the code:
//main.cpp
#include <QApplication>
#include <QDeclarativeEngine>
#include <QDeclarativeComponent>
#include <QDeclarativeItem>
#include <QDebug>
#include "qmlapplicationviewer.h"
Q_DECL_EXPORT int main(int argc, char *argv[])
{
    QScopedPointer<QApplication> app(createApplication(argc, argv));
    QmlApplicationViewer viewer;
    viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
    viewer.setMainQmlFile(QLatin1String("qml/textModification/main.qml"));
    viewer.showExpanded();
    QDeclarativeEngine engine;
    QDeclarativeComponent component(&engine, QUrl::fromLocalFile("qml/textModification/main.qml"));
    QObject *object = component.create();
    QObject *item = qobject_cast<QDeclarativeItem*>(object);
    QObject *text = item->findChild<QObject*>("text1");
    qDebug() << "Text of 'text1' when it's created' -------->" << text->property("text");
    text->setProperty("text", "THIS WORKS!");
    qDebug() << "Text of 'text1' after modifying it -------->" << text->property("text");
    return app->exec();
}
//main.qml
import QtQuick 1.0
Item {
    id: item1
    objectName: "item1"
    width: 400
    height: 400
    Text {
        id: text1
        objectName: "text1"
        x: 0
        y: 0
        width: 400
        height: 29
        text: "This text should change..."
        font.pixelSize: 12
    }
}
Could someone help me?
This may not be as flexible as finding the object using the objectName property, but this will be simple.
main.cpp
#include <QtGui/QApplication>
#include "qmlapplicationviewer.h"
#include <QGraphicsObject>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QmlApplicationViewer viewer;
    viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
    viewer.setMainQmlFile(QLatin1String("qml/TextTest/main.qml"));
    QObject *rootObject = viewer.rootObject();
    rootObject->setProperty("text1Text",QVariant("Change you text here..."));
    viewer.showExpanded();
    int returnVal = app.exec();
    delete rootObject;
    return returnVal;
}
main.qml
import QtQuick 1.0
Item {
    id: item1
    width: 400
    height: 400
    property alias text1Text: text1.text
    Text {
        id: text1
        width: 400
        height: 29
        color: "red"
        text: "This text should change..."
        font.pixelSize: 12
    }
}
                        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