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
}
}
Author by
azorrozua
Updated on June 18, 2022Comments
-
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?