在C++中与Qt.createQmlObject等效的方法是什么?

4

在QML中,我可以通过调用Qt.createQmlObject来动态创建组件(而不是从文件加载)。 示例:

Qt.createQmlObject('import QtQuick 1.0; Rectangle {color: "red"; width: 20; height: 20}', parent, "dynamicPath");

是否有办法从C++代码中实现相同的功能?它不一定需要涉及解析QML - 我只是在寻找一种方法,例如从C++动态创建并附加RectangleTextField到QML文档。

1个回答

3

你是否正在使用已废弃的Qt Quick 1?鉴于你有:

QDeclarativeView *view = ...;
QDeclarativeItem *parent = ...;

您可以做以下事情:

QDeclarativeEngine *engine = view->engine();
QDeclarativeComponent component(engine);
component.setData("import QtQuick 1.0; Rectangle {color: \"red\"; width: 20; height: 20}", QUrl("dynamicPath"));
QDeclarativeItem *item = qobject_cast<QDeclarativeItem *>(component.create());
Q_ASSERT(item);
item->setParentItem(parent);

如果您正在使用Qt Quick 2,您需要将QDeclarative*替换为QQml*QQuick*单击此处了解更多详情。

太好了,谢谢!不过,我没有使用Qt Quick 1——我只是从一些明显过时的文档中复制了示例片段。 - spinda
QUrl("dynamicPath") 是否在文档中有记录?还是你自己起的名字? - Jean-Michaël Celerier
文档中可以得知:"如果提供了_url_,则用于设置组件名称并为由此组件解析的项提供基本路径。" - 通常人们会传递一个空的URL。如果出现错误,传递一些非空内容只是为了清楚地表明错误的来源。 - jpnurmi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接