How to modify a QML Text from C++

11,994

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
    }

}
Share:
11,994
azorrozua
Author by

azorrozua

Updated on June 18, 2022

Comments

  • azorrozua
    azorrozua about 2 years

    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?