>如何检索根对象(下面的代码返回0,rootContext() – > findChild()也从C代码中的任何地方返回0)(类是注册的QML类型和类组件定义的类方法是root的直接子节点,请参阅objectName)并在运行时添加生成的QQuickItem?
> myclass已注册为QML类型.如何使用最底层的代码将QML按钮添加到场景中?
在main.qml(片段)中
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("womanObj");
QQuickWindow *window = qobject_cast(root);
QObject *wobj = window->findChild("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(readHipComp->create());
// 3. Add the instance to the scene.
// readHipBtn->setParentItem(qobject_cast(engine->rootContext()->contextObject()));
// QObject *root = QtQml::qmlContext(this)->findChild("root");
// readHipBtn->setParent(root);
}
UPDATE
extern QQuickWindow *window;
void myclass::add_hip()
{
//...
readHipBtn->setParentItem(window->contentItem());
//...
}
工作,但
3.)它没有看到其他main.qml对象.