3
我是Qt新手,我試圖從C++代碼修改QML文本(顯示在屏幕上)。 我得到的文本被修改,但它並沒有在屏幕上更新,所以我有文本變量修改,但屏幕上的第一個文本。如何從C++修改QML文本
下面是代碼:
//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
}
}
有人能幫助我嗎?
謝謝。
你嘗試在項目調用update()?此外,將文本作爲C++ QObject的屬性導出爲QML(QDeclarativeContext上的setContextProperty,然後QML中的「object.propertyname」)可能會更容易。 – 2012-01-30 11:48:58
文本對象上沒有update()調用。 我會盡力以你告訴我的方式出口,我會告訴你。 謝謝! – AZorrozua 2012-01-30 11:59:29
嘗試轉換爲QGraphicsObject而不是QObject。 – 2012-01-30 12:25:52