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

相关文章
相关标签/搜索