C++ 如何从C++;?

C++ 如何从C++;?,c++,qt,qml,C++,Qt,Qml,我尝试使用QQmlComponent组件(view.engine(),QUrl::fromLocalFile(“MyItem.qml”);然后QOObject*object=component.create();但它给我的Qml组件还没有准备好。进一步尝试将statusChanged信号连接到插槽函数,但它似乎没有加载新的qml组件 QQuickView view; view.setSource(QUrl(QStringLiteral("qrc:/main.qml"))); QQmlCompon

我尝试使用QQmlComponent组件(view.engine(),QUrl::fromLocalFile(“MyItem.qml”);然后QOObject*object=component.create();但它给我的Qml组件还没有准备好。进一步尝试将statusChanged信号连接到插槽函数,但它似乎没有加载新的qml组件

QQuickView view;
view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
QQmlComponent component(view.engine(), QUrl::fromLocalFile("MyItem.qml"));
QObject *object = component.create();
object->setParent(view.rootObject());
view.show()

如果从本地文件加载,则通过在构造函数中指定来将
QQmlComponent
设置为同步加载:

QQmlComponent component(view.engine(),
                        QUrl::fromLocalFile("MyItem.qml"),
                        QQmlComponent::PreferSynchronous );

从C加载QML对象++

QML文档可以与QQmlComponent或QQuickView一起加载。QQML组件将QML文档加载为C++对象,然后可以从C++代码中修改。QQuickView也会这样做,但由于QQuickView是QWindow派生的类,因此加载的对象也会呈现为可视化显示;QQuickView通常用于将可显示的QML对象集成到应用程序的用户界面中


还有,更广泛的主题。

发布您尝试过的代码。QQuickView;view.setSource(QUrl(QStringLiteral(“qrc:/main.qml”));QObject*rootObj=view.rootObject();QQmlComponent组件(view.engine(),QUrl::fromLocalFile(“MyItem.qml”);QObject*object=component.create();对象->setParent(view.rootObject());view.show()我还通过在类的构造函数_view.setSource(QUrl(QStringLiteral(“qrc:/main.qml”))中创建一个类VViewerQml来尝试它;连接(&_视图,信号(statusChanged(QQuickView::Status)),此插槽(onViewStatusChanged(QQuickView::Status))_view.show();在插槽onViewStatusChanged(QQuickView::Status){if(Status){QQmlComponent*c=newqqqmlComponent(_view.engine(),qrl::fromLocalFile(“MyItem.qml”);QQuickItem*i=qobject_cast(c->create());QQuickItem*i=qobject_cast(c->create());//将i添加到视图。rootObjectI尝试将QQmlComponent::PreferSynchronous添加到构造函数中,但它似乎不起作用。程序挂起并给我QQmlComponent:未就绪。问题更为复杂的是,onViewStatusChanged甚至没有调用statusChanged触发的插槽。程序挂起!?还有其他原因你需要发布更多内容,包括
MyItem.qml
.MyItem.qml导入QtQuick 2.4矩形{宽度:400高度:362文本{文本:“Hello World!”font.family:“Helvetica”font.pointSize:24颜色:“红色”}文本编辑{宽度:50高度:60 x:50 y:200}程序试图为此qml创建一个组件,但它挂起,因为qqml组件尚未准备好,无法创建。@CartikSharma您似乎不明白,您有一个很小的本地文件,您说
QQmlComponent
在加载时挂起-这听起来不太可能。请用yo逐步完成代码我怀疑您的QML文件由于错误而无法加载,因此
createObject(..)
调用返回一个导致segfault的nullptr。我通过了调试器,程序到达该行时崩溃,I->setParent(_view->rootObject());其中我是QQuickItem,QQmlComponent*c=新的QQmlComponent(_view->engine(),qrl::fromLocalFile(“MyItem.qml”);QQuickItem*i=qobject_cast(c->create());我应该将父对象设置为什么?P.我还没有准备好QQmlComponent。