2013-08-02 39 views
5

使用動態創建的項目時是否可以獲取Qt錯誤消息?使用動態創建的QML項目時出現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什麼樣的問題寫加載。

回答

21

您應該閱讀並按照documentation

你沒有檢查的是component.status在致電component.createObject之前必須等於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

+0

錯過了文檔的那一部分。謝謝 – Jay

+0

喲。這很可怕。我不*認爲*我已經擊中了,但知道這很好。 – Jay

+0

我想我已經找到了異步加載中的bug。使用QML Loader元素開始加載QML文件。在qml文件中,使用onCompleted信號使其顯示。 – Jay