qt quick工程升级,qmake工程升级至cmake

升级原因

由于音视频工作需要,qt6比qt5的video相关更看重效率。

升级中遇到的问题

在开发的过程中,为了更快速的进行开发,对业务其他不需要代码运行效率的地方使用qml+js的方式进行编写。在升级的过程中发现,程序是可以正常编译通过的,而在运行的时候会提示main.qml:没有找到文件或目录,猜测脚本文件没有编译到工程中。

本文仅介绍工程文件的升级,主要解决脚本文件的编译和路径转换的问题

如下代码所示是5.15工程的资源管理文件qml.qrc

<RCC>
    <qresource prefix="/">
        <file>qml/main.qml</file>
        <file>js/database.js</file>
    </qresource>
</RCC>

如下代码所示是6.2工程的CMakeLists.txt

# 设置CMAKE最小版本
cmake_minimum_required(VERSION 3.16)

# 设置工程名称
project(appclient VERSION 0.1 LANGUAGES CXX)

# 设置编译选项
set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 增加宏定义,如不使用signals slots emit关键字
ADD_DEFINITIONS(-DQT_NO_KEYWORDS)

# 查找qt安装目录
set(CMAKE_PREFIX_PATH $ENV{HOME}/Qt6/6.2.4/gcc_64)

find_package(Qt6 6.2 
  COMPONENTS 
# 引用qt中的模块
    Quick 
    Multimedia 
    WebSockets 
  REQUIRED
)

# 第三方头文件目录
include_directories()

# 链接动态库目录
link_directories()

# 源文件
qt6_add_executable(appclient
  main.cpp
)

# 与qrc结构一致,解决在启动时候找不到qml文件的问题
qt6_add_resources(appclient "client"
  PREFIX
    "/"
  FILES
    "qml/main.qml"
    "js/database.js"
)

set_target_properties(appclient PROPERTIES
  MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
  MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
  MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
  MACOSX_BUNDLE TRUE
  WIN32_EXECUTABLE TRUE
)

target_compile_definitions(appclient
  PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
target_link_libraries(appclient
  PRIVATE
# 链接使用到的模块
  Qt6::Quick
  Qt6::Multimedia
  Qt6::WebSockets
)
posted @ 2022-07-05 13:37  chai51  阅读(502)  评论(0编辑  收藏  举报