使用cmake组织c++代码,一般的流程大概是:
1、创建一个可执行文件A
2、设置A需要的源文件
3、设置A的编译源文件时用到的头文件路径
4、设置A依赖的动态库或静态库
5、设置编译选项
6、设置链接选项
7、设置编译宏定义
QML项目稍微多加了几个步骤:
1、添加资源文件,主要是图片资源和qml文件资源
2、把一些代码编译成模块,这样才能注册QML自定义类型。
下面以示例说明,我的QML项目的目录结构如下 :
cmake源文件如下:
#设置最低cmake版本
cmake_minimum_required(VERSION 3.20.1)
#使用g++作为编译器
SET(CMAKE_CXX_COMPILER /usr/bin/c++)
#设置C++20标准
set(CMAKE_CXX_STANDARD 20)
#创建工程
project(NetToolApp LANGUAGES CXX)
#在widgets项目中,这句代码用来预处理.ui界面文件的,QML项目里好像用不到
set(CMAKE_AUTOMOC ON)
#查找用到的一些库 ,cmake中必须要先查找得到
find_package(Qt6 6.5 REQUIRED COMPONENTS Core Gui Qml Quick)
if (Qt6_VERSION VERSION_GREATER_EQUAL 6.3)
qt_standard_project_setup()
endif()
#创建一个可执行文件
qt_add_executable(${PROJECT_NAME} src/main.cpp)
#添加资源文件,图像,qml代码文件都是资源,加了下面这行指令后,C++代码中就可以找到这些QML文件
#可以用qrc:/qml/App.mql的路径格式访问
qt_add_resources(${PROJECT_NAME}
PREFIX "/" #资源的前缀
FILES
qml/App.qml #资源所在的路径
qml/ConfigUI.qml
qml/MapView.qml
qml/GroupWnd.qml
qml/MyComboBox.qml
qml/ColorButton.qml
qml/MessageListView.qml
qml/TcpClient.qml
qml/EditLine.qml
qml/TaskTable.qml
images/drop-indicator.png
)
#创建一个模块,主要是把C++类注册成QML可以使用的类型
qt6_add_qml_module(${PROJECT_NAME}
URI "MyControl.TreeModel"
VERSION 1.0
SOURCES
src/treemodel.h #TreeView的自定义model代码
src/treemodel.cpp
src/nettoolitemmodel.h #TreeView的自定义model代码(已废弃)
src/nettoolitemmodel.cpp
)
#把当前路径设置为C++头文件搜索路径
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src)
#添加项目依赖的库(动态库,静态库,Object或Interface库)
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Qml
Qt6::Quick
)
代码连接(Qt 6.5):
https://download.csdn.net/download/qq_33271629/89037989
标签:Qt6,src,cmake,代码,QML,qml From: https://blog.csdn.net/qq_33271629/article/details/137059644