Qt警告:QQmlComponent:组件未准备好



使用动态创建的项时,是否可以获得Qt错误消息?

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

qInstallMessageHandler( myMessageOutput );

我将一个基本的qml文件加载到QQuickView中,它运行良好。如果qml源中有错误,它们会显示在我的日志中。如果我动态地创建项目,并且它们包含错误,那么它将失败,没有任何消息。

我创建这样的动态对象:

var component = Qt.createComponent( "config.qml" );
var dlg = component.createObject( parentId, {} );

我收到的唯一错误如下:

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

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

您应该阅读并遵循文档。

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

如果文件加载失败,因为它没有正确解析,那么component.status将等于Component.Error,您应该调用errorString()来获取更多信息。

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

我在显示新窗口时遇到了类似的错误,因为它使用了QtQuick.Layouts,但模块没有安装。安装qml6-module-qtquick-layouts包解决了问题

相关内容

  • 没有找到相关文章

最新更新