qml component is not ready

困擾好久的Component is not ready問題,網絡上有不少種介紹的解決辦法,可是都是未能真正的解決問題。如今就根據本人的使用狀況簡單的討論分析。javascript

提示Component is not ready有如下幾種狀況:html

一、真的代碼寫錯了,本身經過摺疊代碼行的方式進行檢查java

二、組件加載失敗,主要因爲路徑配置失敗,或者資源配置失敗,我屬於後者bash

首先咱們須要確認和定位問題。使用以下qml代碼進行定位,可以知道具體的錯誤緣由。網絡

網上有不少種說法app

在C++層用qDebug測試

在QML、JS層用console就能夠了。ui

問題提示很簡單:is not Type,是組件識別失敗致使的。code

那麼就要去嘗試加載組件,而後網上的方法不少種,列出常見的方法htm

一、在C++層增長qml組件的目錄,測試失敗

engine.addImportPath(QString::fromLatin1("%1/../../../src/%2").arg(QCoreApplication::applicationDirPath(), QString::fromLatin1("qml")));

二、在pro文件中設置qml組件的目錄

#QML_IMPORT_PATH = -L$$PWD/qml/controls
#QML_IMPORT_TRACE=1
#QML2_IMPORT_PATH += -L$$PWD/qml/controls

嘗試了不少種語法,不管是QML仍是QML2,不管是相對路徑仍是絕對路徑,都是失敗的。徹底不起做用

測試上述兩種方法覺得是路徑有問題,嘗試輸出導出路徑

//    for(QString path : engine.importPathList())
//    {
//        qDebug() << path;
//    }

在C++中執行輸出路徑,發現路徑徹底沒有問題,真的很費解。這個就沒有辦法了。

三、在qml中使用import

import QtQuick 2.0
import QtCanvas3D 1.1
import QtQuick.Controls 1.1
import "../qml/MyComponent" as Com

覺得這樣總能夠了吧,結果仍是鎩羽而歸呀,這個配置讓人頭疼許久。

 

最後採用終極的解決方法,配置資源,使用資源必需要在qrc中添加,添加

添加成功後依舊是各類不行,這個理論上是徹底沒有問題的,變態的qt資源加載方式,會讓你噁心到不知道爲何噁心。

意外的測試中發現,資源若是不是在同一個路徑下,加載就會出現各類錯誤,例如找不到資源(實際上是真的存在的),問題被確認:

一、使用的qml界面必須與其使用的資源在qrc的定義中保持在同一路徑下,不然加載失敗。或者使用絕對路徑去加載資源。

二、那麼因爲資源衆多,通常都會採用分文件夾的方式管理,怎麼讓資源在qrc中保持在同一個路徑下。發現了巨坑的別名設置

經過別名設置,能夠實如今qrc中將不一樣文件夾下的資源,變成在一個文件夾。別名支持文件夾設置哦,例如

/res/threejs.js

這樣的話threejs文件就在qrc展現中調整到res文件夾。

最終的文件結構以下:

如此這般操做,資源訪問將均可以直接訪問,全部的資源都放置在同一個文件夾下。

binggo,這樣就完美的解決了資源加載的各類未知了。

參考:https://www.cnblogs.com/hellovenus/p/6357585.html

相關文章
相關標籤/搜索