在QML中,我可以通过调用Qt.createQmlObject
动态创建一个组件(而不是从文件中加载它)。例如:
Qt.createQmlObject('import QtQuick 1.0; Rectangle {color: "red"; width: 20; height: 20}', parent, "dynamicPath");
有没有办法从C ++代码做同样的事情?它不一定要涉及解析QML-I只是寻找一种方法,例如,动态创建并将Rectangle
或TextField
附加到C ++的QML文档中
答案 0 :(得分: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,you'd replace QDeclarative*
与QQml*
和QQuick*
。