- Come recuperare un oggetto radice (il codice sottostante restituisce 0,
rootContext()->findChild()
restituisce anche 0) da qualsiasi posizione in un codice C++ (un metodo di classe in cui la classe è un tipo QML registrato e la definizione del componente classe è un figlio diretto della radice, vedere objectName) e aggiungere un QQuickItem generato in fase di runtime? - C'è myclass registrato come tipo QML. Come aggiungere un QML
Button
alla scena usando il codice più in basso?
Nel main.qml (frammento)Ottieni oggetto radice QML da qualsiasi posizione in un codice in Qt 5.3
import QtQuick 2.3
import QtQuick.Window 2.2
Window {
objectName: root
visible: true
width: 360
height: 100
// ...
}
MyClass.cpp
void myclass::add_hip()
{
setProperty("hip", 87);
QQmlEngine *engine = QtQml::qmlEngine(this);
// QObject *root = engine->rootContext()->findChild<QObject*>("womanObj");
QQuickWindow *window = qobject_cast<QQuickWindow *>(root);
QObject *wobj = window->findChild<QObject *>("womanObj");
// 1. Define a QML component.
QQmlComponent *readHipComp = new QQmlComponent(engine);
readHipComp->setData("import QtQuick.Controls 1.2\n\
Button {\n\
anchors.top: addHipBtn.top\n\
anchors.left: addHipBtn.left\n\
anchors.margins: 3\n\
text: \"Hip value\"\n\
onClicked: {\n\
msgDlg.text = myclass.hip\n\
msgDlg.open()\n\
}\
}", QUrl());
// 2. Create the component instance.
QQuickItem *readHipBtn = qobject_cast<QQuickItem *>(readHipComp->create());
// 3. Add the instance to the scene.
// readHipBtn->setParentItem(qobject_cast<QQuickItem *>(engine->rootContext()->contextObject()));
// QObject *root = QtQml::qmlContext(this)->findChild<QQuickItem *>("root");
// readHipBtn->setParent(root);
}
UPDATE
extern QQuickWindow *window;
void myclass::add_hip()
{
//...
readHipBtn->setParentItem(window->contentItem());
//...
}
lavorato, ma 3.) Non vede altri oggetti main.qml.
Cosa si intende per "ovunque"? Ovunque in QML? Ovunque nei file C++ diversi da main.cpp? –
Metodo classe C++ – programmist