6

使用动态创建的项目时是否可以获得 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 中的任何类型的问题而编写的。

4

1 回答 1

28

您应该阅读并遵循文档

您不检查的是在调用 to 之前component.status必须等于。Component.Readycomponent.createObject

如果文件以某种方式加载失败,因为它没有正确解析,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, {} );

无论如何,您应该始终component.status == Component.Ready在调用createObject().

于 2013-08-02T20:54:36.443 回答