2013-08-02 9 views
5

動的に作成されたアイテムを使用しているときにQtエラーメッセージを表示することはできますか?動的に作成されたQMLアイテムを使用するとQtエラーメッセージが表示される?

私は、実行時にQtの出力をキャプチャするために、メッセージハンドラをインストールしました:

qInstallMessageHandler(myMessageOutput); 

私はQQuickViewに、基本的なQMLファイルをロードし、それが正常に動作します。 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に問題のあらゆる種類のために書かれています負荷。

答えて

21

documentationをよく読んでください。

に電話する前に、component.statusComponent.Readyと等しくなければなりません。

ファイルが読み込まれなかった場合、正しく解析されないため、component.statusComponent.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を主張すべきです。

+0

ドキュメントのその部分を紛失しました。ありがとう – Jay

+0

ヤウ。それが怖いです。私は思っていない*私はそれをヒットしましたが、それは知っていることは非常に良いです。 – Jay

+0

私は非同期の読み込みのバグを回避する方法を見つけたと思います。 QMLローダー要素を使用して、QMLファイルのロードを開始します。 qmlファイルで、onCompletedシグナルを使用して表示させます。 – Jay

関連する問題