【问题标题】:QML2_IMPORT_PATH not set despite call in CMakeLists.txt尽管在 CMakeLists.txt 中调用,但未设置 QML2_IMPORT_PATH
【发布时间】:2016-02-16 15:52:36
【问题描述】:

我正在尝试在基于CMakeQt 项目中导入我自己的模块。

qmldir.txt

module MyModule
MyModuleLabel 1.0 MyModuleLabel.qml

根据documentation,我需要设置QML2_IMPORT_PATH变量。

SET(QML2_IMPORT_PATH "/graphics")

或者,我也可以使用QQmlEngine::addImportPath()

两种方法都试过了,还是不行。 QQmlEngine::importPathList() 不显示我的路径,因此编译器说:

module "MyModule" is not installed

我错过了什么?

【问题讨论】:

  • CMake 配置构建,cmake 中的环境变量仅在构建时 生效,而QML2_IMPORT_PATH 仅在运行时 相关。构建系统是错误的地方。 (您可以将模块与可执行文件一起安装,并将 addImportPath() 与 QCoreApplication::applicationDirPath() 一起使用)。
  • 我不确定我是否正确理解了你的最后一句话。我尝试了以下操作:engine.addImportPath(QCoreApplication::applicationDirPath() + "/graphics"); 并将我的graphics 文件夹移动到二进制目录中。模块仍未找到。请注意,graphics 文件夹的 QML 文件未链接到 .qrc 文件中。这些图形元素应被视为独立于项目。
  • 文件名应为qmldir,不带任何扩展名

标签: qt module cmake qml


【解决方案1】:

就像 Frank Osterfeld 所说,QML2_IMPORT_PATH 环境变量仅在运行时相关,而不是我设置导入路径的位置。

方法是使用QQmlEngine::addImportPath() 如果您的导入路径是/foo/bar/modules/,并且您尝试使用import MyModule 1.0,QML 引擎将尝试在/foo/bar/modules/MyModule/ 中查找名为qmldir(无扩展名)的文件。 所以你的文件的完整路径应该是/foo/bar/modules/MyModule/qmldir

【讨论】:

  • 我忘记创建一个与我的模块同名的文件夹。在这种情况下,它会为 /path/to/project/graphics/MyModule/ 提供其中的 QMLqmldir 文件。
猜你喜欢
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 2021-09-02
  • 1970-01-01
  • 2018-11-27
相关资源
最近更新 更多