ale*_*vak 5 qt qml qt-quick qtquick2
rootContext()->findChild()从C++代码中的任何位置检索根对象(下面的代码返回0,也返回0)(类是注册的QML类型,类组件定义是根的直接子类的类方法,请参阅objectName )并在运行时添加生成的QQuickItem?Button使用最底层的代码将QML添加到场景中?在main.qml(片段)中
import QtQuick 2.3
import QtQuick.Window 2.2
Window {
objectName: root
visible: true
width: 360
height: 100
// ...
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
extern QQuickWindow *window;
void myclass::add_hip()
{
//...
readHipBtn->setParentItem(window->contentItem());
//...
}
Run Code Online (Sandbox Code Playgroud)
工作,但3.)它没有看到其他main.qml对象.
您不需要 objectName。
获取根元素并检查它是否是一个窗口:
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QObject *root = engine.rootObjects()[0];
QQuickWindow *window = qobject_cast<QQuickWindow *>(root);
if (!window) {
qFatal("Error: Your root item has to be a window.");
return -1;
}
window->show();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8983 次 |
| 最近记录: |