Comment accéder à un objet QML imbriqué à partir de C ++?
Voici un exemple reproductible:
principal.qml
import QtQuick 2.0
Item {
id : root
width: 360
height: 360
Text {
id : t1
text: qsTr("Hello World")
property int someNumber: 1000
anchors.centerIn: parent
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
}
main.cpp
#include <QtGui/QGuiApplication>
#include <QQmlEngine>
#include <QQmlComponent>
#include <QQmlProperty>
#include <QDebug>
#include "qtquick2applicationviewer.h"
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/untitled/main.qml"));
viewer.showExpanded();
QQmlEngine engine;
QQmlComponent component(&engine, "qml/untitled/main.qml");
QObject *object = component.create();
qDebug() << "Property value:" << QQmlProperty::read(object, "root.t1.someNumber").toInt();
return app.exec();
}
Je souhaite accéder à la property
somenumber de la text
de la QML Item
.
La méthode ci-dessus n'est pas de produire les résultats escomptés.
Comment faire?
source d'informationauteur Aquarius_Girl
Vous devez vous connecter pour publier un commentaire.
Vous avez deux façons (au moins) pour ce faire en fonction de vos préférences personnelles.
QML code d'extension
Vous pouvez ajouter une propriété alias à la racine de l'élément comme suit:
Code C++ extension
Depuis le QML éléments sont
QObject
vous pouvez regarder pour les enfants explicitement en tant que bien, tout comme vous le feriez dans un C++QObject
hiérarchie. Le code pourrait être quelque chose comme ceci:Toutefois, cela signifie que vous aurez besoin d'ajouter les
objectName: "SomeNumberText"
ligne de votre Texte à l'enfant de l'élément dans le fichier qml.Ici vous pouvez trouver une méthode récursive la recherche d'un élément QML par
objectName
et de commencer àQQmlApplicationEngine::rootObjects()
: