2013-08-02 11 views
5

Ist es möglich, Qt-Fehlermeldungen zu erhalten, wenn dynamisch erstellte Artikel verwendet werden?Qt-Fehlermeldungen bei Verwendung dynamisch erstellter QML-Elemente?

ich einen Meldungshandler installiert haben Qt Ausgang zur Laufzeit zu erfassen:

qInstallMessageHandler(myMessageOutput); 

ich eine grundlegende qml-Datei in eine QQuickView laden und es funktioniert gut. Wenn die qml-Quelle Fehler enthält, werden sie in meinem Protokoll angezeigt. Wenn ich Elemente dynamisch erstelle und sie Fehler enthalten, schlägt es ohne Nachricht fehl.

ich erstellen, um die dynamische Objekte wie folgt aus:

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

Der einzige Fehler, den ich erhalten, ist die folgende:

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

Dieser Fehler für jede Art von Problem in der QML, um es versucht geschrieben Belastung.

Antwort

21

Sie sollten lesen und folgen documentation.

Was Sie nicht überprüfen, ist, dass component.status gleich Component.Ready vor dem Aufruf an component.createObject sein muss.

Wenn die Datei irgendwie nicht geladen werden konnte, da sie nicht korrekt analysiert wird, ist component.status gleich Component.Error, und Sie sollten errorString() anrufen, um weitere Informationen zu erhalten.

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, {}); 

Auf jeden Fall sollten Sie immer component.status == Component.Ready behaupten vor createObject() Aufruf.

+0

Verpasste diesen Teil der Dokumentation. Danke – Jay

+0

Yow. Das ist unheimlich. Ich glaube nicht, dass ich das getroffen habe, aber es ist sehr gut zu wissen. – Jay

+0

Ich denke, dass ich eine Arbeit für den Fehler beim asynchronen Laden herausgefunden habe. Verwenden Sie das QML Loader-Element, um mit dem Laden einer QML-Datei zu beginnen. Verwenden Sie in der qml-Datei das Signal onCompleted, damit es angezeigt wird. – Jay

Verwandte Themen