2013-08-02 18 views
5

E 'possibile ottenere messaggi di errore quando si utilizza Qt elementi creati dinamicamente?Messaggi di errore Qt quando si utilizzano elementi QML creati dinamicamente?

Ho installato un gestore di messaggi per acquisire l'output Qt in fase di esecuzione:

qInstallMessageHandler(myMessageOutput); 

ho caricare un file QML base in un QQuickView e funziona benissimo. Se ci sono errori nella fonte qml vengono visualizzati nel mio registro. Se creo oggetti dinamicamente e contengono errori, fallisce senza alcun messaggio.

ho creare gli oggetti dinamici come questo:

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

L'unico errore che ricevo è il seguente:

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

Questo errore è stato scritto per qualsiasi tipo di problema in QML si sta cercando di caricare.

risposta

21

È necessario leggere e seguire documentation.

Quello che non si controlla è che component.status deve essere uguale a Component.Ready prima di chiamare a component.createObject.

Se il file in qualche modo non è stato caricato, in quanto non analizza correttamente, component.status sarà pari a Component.Error, e si dovrebbe chiamare errorString() per avere maggiori informazioni.

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

In ogni caso si dovrebbe sempre valere component.status == Component.Ready prima di chiamare createObject().

+0

perso quella parte della documentazione. Grazie – Jay

+0

Yow. È spaventoso. Non penso * Ho colpito ma è molto bello saperlo. – Jay

+0

Penso di aver capito come ovviare al bug nel caricamento asincrono. Utilizzare l'elemento QML Loader per iniziare il caricamento di un file QML. Nel file qml utilizzare il segnale onCompleted per far sì che venga visualizzato. – Jay

Problemi correlati