【问题标题】:CMake, Qt6 - module "QtQuick.Controls" is not installedCMake,Qt6 - 未安装模块“QtQuick.Controls”
【发布时间】:2021-12-15 21:29:06
【问题描述】:

我目前正在学习 QtQuick,我遇到了各种各样的问题,但这是我迄今为止无法解决的第一个问题。作为背景,我使用的是 MVSC、Visual Studio 2019、CMake 和 Qt6。

在运行我非常基本的程序时,我在我创建的 main.qml 文件中的 QtQuick Controls 导入语句中收到错误 module "QtQuick.Controls" is not installed。我正在使用的 CMakeLists.txt 文件的相关部分是:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt6 COMPONENTS Quick REQUIRED)
find_package(Qt6 COMPONENTS QuickControls2 REQUIRED)
find_package(Qt6 COMPONENTS Core REQUIRED)
find_package(Qt6 COMPONENTS Gui REQUIRED)

qt_add_executable(nameHere
    "src/main.cpp"
    "gui/main.qml"
)

target_link_libraries(nameHere PRIVATE Qt6::Quick Qt6::QuickControls2)

qt_import_plugins(nameHere QWindowsIntegrationPlugin )

注意:我在搜索解决方案时有一些额外的 find 包 - 删除或添加 Gui 或 Core 不会改变错误

检查构建文件夹后,这些 dll 就在那里:

  • Qt6Gui
  • Qt6Core
  • Qt6Network
  • Qt6OpenGL
  • Qt6Qml
  • Qt6QmlModels
  • Qt6Quick

main.cpp 如下所示:

#include <QtQuick>
#include <QtQuickControls2>

int main(int argc, char* argv[])
{
    QGuiApplication app(argc, argv);

    QQuickView* view = new QQuickView;
    view->setSource(QUrl::fromLocalFile("../../gui/main.qml"));
    view->show();
    return app.exec();
}

main.qml文件的内容是

import QtQuick 
import QtQuick.Controls

ApplicationWindow {
    id: window
    width: 400
    height: 500
    visible: true

}

再一次,完整的错误是:

/gui/main.qml:2:1: module "QtQuick.Controls" is not installed
     import QtQuick.Controls
     ^
/gui/main.qml: module "QtQml.WorkerScript" is not installed
/gui/main.qml:2:1: module "QtQuick.Controls" is not installed
     import QtQuick.Controls
     ^
/gui/main.qml: module "QtQml.WorkerScript" is not installed

任何帮助将不胜感激!


进一步挖掘我的 vcpkg 文件表明实际上有一个 Qt6QuickControls2.dll 没有被放入构建文件夹中。我不喜欢将文件复制并粘贴到构建文件夹中。我不确定为什么所有其他 Qt dll 都被 CMake 放入该文件夹,但不是这个特定的 dll。我的 CMake 文件中是否缺少某些内容,或者这可能是 Qt 如何使用 CMake 设置的错误?


同样,只是继续将 QuickControls2 dll 文件复制到文件夹中并不能真正解决问题,所以我认为这里还有其他事情发生。


好吧,在 Qt6 中,QucikControls2 包含在 QtQuick 中,所以我不确定它是否真的需要那个额外的 dll?不知道这里发生了什么,但我什至跑了windeployqt,它说我已经获得了所有需要的运行时依赖项。现在我不知道这个问题是从哪里来的。

【问题讨论】:

    标签: c++ qt cmake qt6


    【解决方案1】:

    Qml 文件不应在 qt_add_executable 中链接。在 Qt6 中,使用

    qt_add_qml_module(nameHere
        URI gui
        VERSION 1.0
        QML_FILES gui/main.qml)
    

    请参阅此处的文档: https://doc-snapshots.qt.io/qt6-dev/qt-add-qml-module.html

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 2016-09-08
      • 2021-12-07
      相关资源
      最近更新 更多