Qt警告:QQmlComponent:组件未就绪

Qt警告:QQmlComponent:组件未就绪,qml,qt5,Qml,Qt5,使用动态创建的项时是否可能获取Qt错误消息 我安装了一个消息处理程序,用于在运行时捕获Qt输出: qInstallMessageHandler( myMessageOutput ); 我将一个基本的qml文件加载到QQuickView中,它工作正常。如果qml源中有错误,它们将显示在我的日志中。如果我动态创建项目,并且它们包含错误,那么它将失败,并且不会显示任何消息 我创建的动态对象如下所示: var component = Qt.createComponent( "config.qml" )

使用动态创建的项时是否可能获取Qt错误消息

我安装了一个消息处理程序,用于在运行时捕获Qt输出:

qInstallMessageHandler( myMessageOutput );
我将一个基本的qml文件加载到QQuickView中,它工作正常。如果qml源中有错误,它们将显示在我的日志中。如果我动态创建项目,并且它们包含错误,那么它将失败,并且不会显示任何消息

我创建的动态对象如下所示:

var component = Qt.createComponent( "config.qml" );
var dlg = component.createObject( parentId, {} );
我收到的唯一错误如下:

'qml\qqmlcomponent.cpp':845 function: 'QObject* QQmlComponentPrivate::beginCreate(QQmlContextData*)'|Qt Warning: QQmlComponent: Component is not ready

此错误是针对它试图加载的qml中的任何类型的问题编写的。

您应该阅读并遵循

在调用
Component.createObject
之前,您没有检查的是该值必须等于
Component.Ready

如果文件由于解析不正确而无法加载,
component.status
将等于
component.Error
,您应该调用以获取更多信息

var component = Qt.createComponent( "config.qml" );
if( component.status != Component.Ready )
{
    if( component.status == Component.Error )
        console.debug("Error:"+ component.errorString() );
    return; // or maybe throw
}
var dlg = component.createObject( parentId, {} );

无论如何,在调用
createObject()

之前,您应该始终断言
component.status==component.Ready
。谢谢。那太可怕了。我想我还没有做到这一点,但很高兴知道。我想我已经找到了解决异步加载中错误的方法。使用QML Loader元素开始加载QML文件。在qml文件中,使用未完成的信号使其显示。这与qt官方声明的内容不符。他们说“如果你确定这是一个本地文件”,你可以立即调用它。然而,那里有一些错误,看起来很严重,祝福你!