2

我想为我的项目使用 QtQuickCompiler,但是一旦我调用 qtquick_compiler_add_resources,我就会收到以下错误消息:

Unknown CMake command "qtquick_compiler_add_resources". 

我使用 Qt6 和 CMake 3.18.2。我已经阅读了很多文档,但是这里的所有内容都应该是正确的。那是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)

project(ProtoPaste LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC OFF)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_PREFIX_PATH "C:/Qt/6.0.0/msvc2019_64/lib/cmake")
set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/src/Resource.rc")
option(CLIP_TESTS OFF)
option(CLIP_EXAMPLES OFF)

find_package(QT NAMES Qt6 Qt5 COMPONENTS Core Quick QuickControls2 Widgets Qt6QuickCompiler REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Quick QuickControls2 Widgets REQUIRED)

qtquick_compiler_add_resources(RESOURCES
    src/qml.qrc
    src/images.qrc
)

set(PROJECT_SOURCES
        src/main.cpp
        src/availableElement.cpp
        src/selectedElement.cpp
        src/availableElementsModel.cpp
        src/selectedElementsModel.cpp
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(ProtoPaste WIN32
        ${PROJECT_SOURCES}
        ${RESOURCES}
        ${APP_ICON_RESOURCE_WINDOWS}
    )
else()
    add_executable(ProtoPaste WIN32
        ${PROJECT_SOURCES}
        ${RESOURCES}
        ${APP_ICON_RESOURCE_WINDOWS}
    )
endif()

add_subdirectory(dependencies)

target_include_directories(ProtoPaste PRIVATE ${clip_SOURCE_DIR})
target_compile_definitions(ProtoPaste PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
target_link_libraries(ProtoPaste
  PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Quick Qt${QT_VERSION_MAJOR}::QuickControls2 Qt${QT_VERSION_MAJOR}::Widgets clip)

我究竟做错了什么?

4

1 回答 1

0

tl;博士

qt_add_qml_module改为使用

完整答案:

对于 Qt6,它似乎qtquick_compiler_add_resources已被删除。新的 CMake 函数Qt6QmlMacros.cmakeqt_add_qml_module. 您正在寻找的功能以前在Qt5QuickCompilerConfig.cmake. 我可以在 Qt6 中找到的唯一提及该函数的是源文件:

declarative/tools/qmlcachegen/Qt6QuickCompilerConfig.cmake.in

在那里声明的函数只包含这个警告:

function(qtquick_compiler_add_resources)
    message(WARNING "Use qt_add_qml_module instead of qtquick_compiler_add_resources."
                    "QML and JavaScript files are automatically compiled when creating a QML"
                    " module.")
endfunction()

询问有关此问题的 Qt 支持,我被定向到此博客: https ://www.qt.io/blog/introduction-to-the-qml-cmake-api 这非常有帮助,并提出了此更改的原因。

这个新函数默认将 qml 编译到资源文件系统中的指定位置。用户可以禁用编译。

对于我们这些支持必须与旧 Qt 版本(例如 Qt5.6)以及 Qt6.x 一起使用的基于 CMake 的项目的人来说,这意味着拆分之前包含纯资源(例如 svg/png)和 qml 文件的 qrc 文件. 资源可以编译,qt_add_resourcesqml文件可以添加qt_add_qml_module

编辑:仔细观察,似乎资源也可以通过qt_add_qml_module.

于 2021-11-15T20:54:07.200 回答