我需要动态创建QQuickitem
&添加到我的main.qml
。
尝试这样做,我按以下方式创建QQuickitem
。
qml_engine->load(QUrl(QStringLiteral("qrc:/qml/main.qml")));
// Creating my QQuickItem here
QQuickItem * dynamic_quick_item = new QQuickItem();
dynamic_quick_item->setObjectName("DynamicQuickItemObject");
dynamic_quick_item->setHeight(500);
dynamic_quick_item->setWidth(500);
dynamic_quick_item->setParent(qml_engine->parent());
我可以访问QQmlApplicationEngine
中的main.cpp
。
问题:如何将dynamic_quick_item
添加到main.qml
中的项目中?我想动态地将dynamic_quick_item
添加到来自C ++端的main.qml
中的项目列表中。
无需添加到main.qml
。只想在QQuickItem
中定义的QML项列表中添加main.qml
,这与main.qml
中定义的其他QML项非常相似。有没有办法实现这个目标?
更新:执行以下操作应获取我添加的QQuickItem
的有效实例。但它不是
QQuickItem *my_dynamic_quickitem = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("DynamicQuickItemObject");
我将my_dynamic_quickitem
视为null,这意味着我创建的QQuickItem从未添加
答案 0 :(得分:0)
QML项目可以使用QQmlComponent动态加载。 QQmlComponent将QML文档作为C ++对象加载,然后可以从C ++代码进行修改。
您可以在本指南http://doc.qt.io/qt-5/qtqml-cppintegration-interactqmlfromcpp.html#loading-qml-objects-from-c
中找到详细说明这是动态创建QML对象并将其放入QML文件的示例。
#include <QGuiApplication>
#include <QQmlComponent>
#include <QQmlEngine>
#include <QQuickItem>
#include <QQuickView>
int main(int argc, char** argv)
{
QGuiApplication app(argc, argv);
// Init the view and load the QML file.
QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:///closeups/closeups.qml"));
// The size of the window
view.setMinimumSize(QSize(800, 600));
// Create Text QML item.
QQmlEngine* engine = view.engine();
QQmlComponent component(engine);
component.setData("import QtQuick 2.0\nText {}", QUrl());
QQuickItem* childItem = qobject_cast<QQuickItem*>(component.create());
if (childItem == nullptr)
{
qCritical() << component.errorString();
return 0;
}
// Set the text of the QML item. It's possible to set all the properties
// with this way.
childItem->setProperty("text", "Hello dynamic object");
// Put it into the root QML item
childItem->setParentItem(view.rootObject());
// Display the window
view.show();
return app.exec();
}