我目前正在学习QtQuick,我遇到了各种各样的问题,但这是我迄今为止第一个无法解决的问题。作为背景,我使用MVSC、VisualStudio2019、CMake和Qt6。
在运行我非常基本的程序时,我将在我创建的QtQuick文件中QtQuick控件的导入语句上获得错误main.qml
。我使用的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不会更改错误
在检查build文件夹时,这些dll就在那里:
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都是由CMake放置到该文件夹中的,而不是这个特定的dll。我的CMake文件中是否遗漏了一些东西,或者这可能是CMake如何设置Qt的一个bug?
同样,仅仅继续将QuickControls2 dll文件复制到文件夹中并不能真正解决问题,所以我认为这里还存在其他问题。
那么,在Qt6中,QucikControls2包含在QtQuick中,所以我不确定它是否真的需要额外的dll?不知道这里发生了什么,但我甚至运行了windeployqt,它说我已经获得了所有所需的运行时依赖项。现在我不知道这个问题是从何而来的。
发布于 2021-11-04 18:27:28
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
发布于 2022-05-29 17:24:51
对我来说,自从我从import QtQuick.Components 1.0
中删除'1.0‘并像import QtQuick.Components
一样离开它之后,它就起了作用
https://stackoverflow.com/questions/69792027
复制相似问题