使用 KDE Kirigami 时找不到 QML 模块

Posted

技术标签:

【中文标题】使用 KDE Kirigami 时找不到 QML 模块【英文标题】:QML module not found when using KDE Kirigami 【发布时间】:2019-08-22 16:59:00 【问题描述】:

所以我决定在我的应用程序中使用 KDE Kirigami UI 框架,所以我遵循了here 的说明。我在我的 app 目录中克隆了 repo,然后在我的项目文件中添加了一个简单的include(kirigami/kirigami.pri)

现在这可行,但是我遇到的问题是在 QML 中总是出现错误:QML module not found 当我导入插件时(import org.kde.kirigami 2.9)。该项目仍然可以正常编译和运行,我可以使用我需要的 UI 组件,但主要问题是 Kirigami 插件的代码完成和语法突出显示不起作用。

here 之前有人问过类似的问题,我已经尝试了该线程答案中的所有建议,但没有一个有效:

我使用绝对路径和相对路径导入了 QQmlEngine::addImportPath kirigami/src/controls 文件夹。我也试过qrc:/

我在我的项目文件中添加了QML_IMPORT_PATH += $$PWD/kirigami/src/controls $$PWD/kirigami 行。

【问题讨论】:

【参考方案1】:

当您将鼠标悬停在 QML 文件中的“找不到模块 org.kde.kirigami”错误标记上时,弹出窗口会告诉您 Qt Creator 正在 QML_IMPORT_PATH 中查找这些文件。它还告诉您如何设置。

通过将QML_IMPORT_PATH += … 添加到您的项目文件中,您已将其设置为基于qmake 的构建过程。但是,Kirigami 项目通常使用 CMake,这可能是您之前的尝试没有成功的原因。

要为基于 CMake 的构建系统设置 QML_IMPORT_PATH,您需要从项目树的根目录中打开 CMakeLists.txt 文件并在顶部添加以下部分:

# ------------------------- BEGIN: lists to maintain manually -------------------------

# Directories where Qt Creator can find QML files of Kirigami etc. on your system.
#   (This setting is cached in variable QML_IMPORT_DIR, see below. Delete
#   $BUIL_DIR/CMakeCache.txt to make make changes here effective.)
list(APPEND QML_DIRS "/usr/lib/x86_64-linux-gnu/qt5/qml")

# ------------------------- END: lists to maintain manually -------------------------


# Tell Qt Creator where to find QML files.
#   (The build process will work without this, but no code completion etc..)
set(
    QML_IMPORT_PATH "$QML_DIRS"
    CACHE STRING "Qt Creator 4.1 extra qml import paths"
)

当然,将其调整为适合您系统的正确目录。在基于 Debian / Ubuntu 的系统上,以下将确定包含从存储库安装的 Kirigami QML 文件的目录:

dpkg -L qml-module-org-kde-kirigami2 | grep "\.qml"

来源: *** 上的another answer

【讨论】:

感谢您的回答,我忘了自己回答这个问题,因为这个问题已经在Qt forum 中解决了。

以上是关于使用 KDE Kirigami 时找不到 QML 模块的主要内容,如果未能解决你的问题,请参考以下文章

使用 cocoapods 时找不到 Mantle/Mantle.h' 文件

为啥使用 Origin 标头时找不到路由

为啥使用 RDP 时找不到远程 SmartCard

使用 InvokeMethod 创建时找不到路径

编译时找不到动态库

尝试使用 animateWithDuration 时找不到方法 '+animateWithDuration:delay:options:animations:'