5

使用 QtCreator 时,我在编辑器中显示一个 qml 文件。qml 文件用于名为main.qml插件的文件。

然后我点击Design按钮。它显示错误消息:QML module not found

如果我获取Go to error链接,它将转到包含以下内容的行import com.name.os.app.all 1.0。这是插件所需的各种组件 qml 文件的位置。

我已将路径添加c:\users\me\ui\viewer\到我的QML_IMPORT_PATH env变量。如果 QtCreater 将com.name...from qml 文件导入语句附加到我添加到的路径名QML_IMPORT_PATH,它将找到所需的目录。它没有。

该项目使用qmake。

我尝试使用为我的主 qml 视图容器文件qmlplugindump.exe生成一个qmltypes文件,但qmlplugindump.exe给我一个错误,说component is not readyand file::///c:/Users/name/ui/viewer/modules/app/qml/com/name/os/app/all/typelist.qml:2:1 module MyViewContainer.qml is not installed

我使用的命令是qmlplugindump.exe MyViewContainer.qml 1.0 c:\users\myname\ui\viewer\modules\app\qml\com\name\os\app\all\ > ...

4

4 回答 4

5

这个错误毁了我的生活“QML 模块未找到错误”的
真正解决方案
: 假设您在这样的目录中有插件,其中包含 qmldir, "myproject/modules/mymodule/blabla.qmldir"
您需要在“.pro”文件中导入这样的父目录:

QML_IMPORT_PATH += $$PWD/modules

不像这样(这个不行): //---------------------------- ------- 旁注: 这也会发生在 qml 的其他部分,就像qmlplugindump你需要给父目录而不是确切的文件夹!但windeployqt正在使用确切的文件夹
QML_IMPORT_PATH += $$PWD/modules/mymodule


例如:

qmlplugindump lib 1.0 C:\Users\Administrator\Documents\projectName\3rdparty > C:\Users\Administrator\Documents\projectName\3rdparty\lib\lib.qmltypes

//------------------------------------------------
和第二大重要的部分是Qt Creator 中的QML 仿真层
转到工具->选项->Qt Quick->Qt Quick Designer
选择“使用使用所选 qt 构建的 Qml 仿真层” ,
如果它已经被选中,请查看该“顶层”下的文本框构建路径”
它应该引用 Qt 版本的 bin 目录,它应该与插件 Qt 版本相同:

..\5.12.1\msvc2017\bin    

对我来说:(它应该与您用于套件和 blabla 的版本相同)

C:\QtN\5.12.1\msvc2017\bin  

它不应该是这样的:

C:\Users\Administrator\AppData\Roaming\QtProject\qtcreator\qmlpuppet 


在插件中添加新项目后不要忘记部署(cmd命令):

windeployqt --qmldir C:\Users\Administrator\Documents\projectName C:\Users\Administrator\Documents\build-projectName-5_12-Debug\debug

和插件转储:

qmlplugindump lib 1.0 C:\Users\Administrator\Documents\projectName\3rdparty > C:\Users\Administrator\Documents\projectName\3rdparty\lib\lib.qmltypes  

此后,如果 QtCreator 为插件中的新对象提供错误,则需要重新启动 QtCreator 就是这样!

如果仍然有问题,您需要 - 清理所有 - 运行 Qmake - 重建所有解决了这么多问题的问题。在某些情况下,您需要将 qml 文件放入5.13.1\msvc2017\qml或任何适合您的 qt 版本的文件中

于 2019-03-31T10:59:23.663 回答
1

Have you tested this plugin fully? I ask this because I have written a number of plugins and have run into this issue multiple times. Possible issues include the version of Qt you are using, and some form of naming error in the plugin uri / classname.

I have an app that I build for multiple versions of Qt and it seems that the qmlplugindump tool has different levels of effectiveness.

Sorry to be so general, but hopefully it points you in the right direction.

于 2012-08-24T05:55:58.650 回答
1

在 QtCreator 中,执行“项目清理”,然后重新构建。将找到该模块。

我有同样的问题,偶然发现了你的问题。经过一番努力,“干净”和重建工作。

在构建过程中似乎有一个“不完整的依赖检查”,以“理解”main.cpp需要重建,然后将暴露qmlRegisterType<MyType>()它以便可以在main.qml.

于 2013-01-04T23:49:55.397 回答
0

经过两天的谷歌搜索和头痛,感谢@MoreMag,我终于解决了!我只是在这里写一些要点,希望对大家有所帮助!

问题:

发现问题的导入文件不起作用

解决方案:

① 进入工具-> 选项-> Qt Quick -> QML Emulation Layer

②勾选Use QML emulation layer that build with selected Qt

③点击浏览按钮选择Qt构建环境的bin文件夹。路径格式为D:\Qt\5.15.2\msvc2019_64\bin。这里我使用的是 msvc2019 64bit 构建环境。

④ 点击Apply按钮并重启Qt creater。完毕!

解决方案

Qt Creator 文档说

QML 仿真层(也称为 QML Puppet)在设计模式中用于渲染和预览图像以及收集数据。为了能够从 QML 模块正确呈现自定义类型,必须使用与 QML 模块相同的 Qt 版本构建仿真层。默认情况下,Qt Creator 提供了一个后备仿真层,并使用与 Qt Creator 相同的 Qt 版本构建。因此,您的 QML 模块大多不会开箱即用。

我猜这个问题是由于默认的 QML Emulation 层可能与某些 QML 模块不兼容造成的。就我而言,它是 QtMultimedia 模块。

于 2020-11-22T08:46:26.430 回答