CMake、Qt6 - 模块 "QtQuick.Controls" 未安装
CMake, Qt6 - module "QtQuick.Controls" is not installed
我目前正在学习 QtQuick,并且 运行 遇到过各种各样的问题,但这是我迄今为止无法解决的第一个问题。对于背景,我使用的是 MVSC、Visual Studio 2019、CMake 和 Qt6。
在 运行 我的非常基本的程序上,我在我创建的 main.qml
文件中的 QtQuick 控件的导入语句中收到错误 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 )
注意:我在其中通过搜索解决方案获得了一些额外的查找包 - 删除或添加 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,它说我已经获得了所有需要的运行时依赖项。现在我不知道这个问题是从哪里来的。
不应在 qt_add_executable 中链接 Qml 文件。在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
对我来说,它起作用了,因为我从
import QtQuick.Components 1.0
让它像
import QtQuick.Components
我目前正在学习 QtQuick,并且 运行 遇到过各种各样的问题,但这是我迄今为止无法解决的第一个问题。对于背景,我使用的是 MVSC、Visual Studio 2019、CMake 和 Qt6。
在 运行 我的非常基本的程序上,我在我创建的 main.qml
文件中的 QtQuick 控件的导入语句中收到错误 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 )
注意:我在其中通过搜索解决方案获得了一些额外的查找包 - 删除或添加 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,它说我已经获得了所有需要的运行时依赖项。现在我不知道这个问题是从哪里来的。
不应在 qt_add_executable 中链接 Qml 文件。在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
对我来说,它起作用了,因为我从
import QtQuick.Components 1.0
让它像
import QtQuick.Components