我在向现有场景添加新QML对象时遇到问题。
我的main.qml
来源:
ApplicationWindow
{
id:background
visible: true
width: 640
height: 480
}
MyItem.qml
来源:
Rectangle
{
width: 100
height: 62
color: "red"
anchors.centerIn: parent
}
最后,这是我的main.cpp
来源:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
QQmlComponent *component = new QQmlComponent(&engine);
component->loadUrl(QUrl("qrc:/MyItem.qml"));
qDebug() << "component.status(): "<< component->status();
QObject *dynamicObject = component->create();
if (dynamicObject == NULL) {
qDebug()<<"error: "<<component->errorString();;
}
return app.exec();
}
main.qml
正确显示,但MyItem.qml
未显示在main.qml
内。 Component.status()
返回状态Ready
,dynamicObject
没有错误。我做错了什么?
答案 0 :(得分:1)
您需要为该项指定父项,否则它不是可视层次结构的一部分,并且不会被呈现。
答案 1 :(得分:0)
我认为您应该使用QQuickView
代替QQmlEngine
。 main.cpp
将是:
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQuickView view;
view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
view.show();
QQmlComponent component(view.engine(), QUrl("qrc:/MyItem.qml"));
QQuickItem *item = qobject_cast<QQuickItem*>(component.create());
item->setParentItem(view.rootObject());
QQmlEngine::setObjectOwnership(item, QQmlEngine::CppOwnership);
return app.exec();
}
您需要将main.qml
类型从ApplicationWindow
更改为Item
Item
{
id:background
visible: true
width: 640
height: 480
}
这样更容易,这样您就可以创建一个扩展QQuickView
并管理新项目创建的类。