ubuntu 20.0.4
ros2 版本:foxy
qt版本:5.15.2
主体思路:
单独创建qt项目和ros2项目,再将qt项目中的文件移动到ros2项目中,最后修改ros2项目的cmakelist文件。
1、创建qt项目
新建文件夹,在文件夹内创建qt项目(按qt界面操作,一步步创建)
2、创建ros2项目
新建文件夹,再创建项目,命令如下
mkdir ros2_ws
ros2 pkg create --build-type ament_cmake ros2_project
3、规划文件夹
在ros2_project项目中添加如下文件夹,方便分类管理程序各种文件,
创建 include文件夹,用于保存.h、.hpp头文件。
创建ui文件夹,用于保存qt的.ui文件。
创建resources文件夹,用于存在qt的.qrc文件。
按上述分类,将qt项目中的相应文件移到ros2_project项目相应文件夹里。
4、修改ros2_project项目中的cmakelist.txt文件
打开ros2_project项目中的cmakelist.txt文件,并进行如下修改。
1、增加qt的依赖
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
2、创建正则匹配查找各类文件(上述第3步中创建的各类文件夹相应的文件)
file(GLOB SOURCE_DIR RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp)
file(GLOB UI_DIR RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS ui/*.ui)
file(GLOB INCLUDE_DIR RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS include/*.h *hpp)
file(GLOB RESOURCES_DIR RELATIVE ${CMAKE_SOURCE_DIR} FOLLOW_SYMLINKS resources/*.qrc)
3、设置qt各类文件的编译(下述中的qt5,需要根据自己的qt版本修改相应版本名)
qt5_wrap_ui(QT_UI_HPP ${UI_DIR})#{}中的名称要与上面第4.2步file里的名称一致
qt5_wrap_cpp(QT_MOC_HPP ${SOURCE_DIR})#{}中的名称要与上面第2步file里的名称一致
qt5_add_resources(QT_RESOURCE_CPP ${RESOURCES_DIR)#{}中的名称要与上面第2步file里的名称一致
4、增加include文件搜索路径
include_directories(
include/
${CMAKE_CURRENT_BINARARY_DIR}
)
5、增加ros2节点编译依赖的定义
add_executable(${PROJECT_NAME}
${ SOURCE_DIR}#4.2和第4.3步中创建的几个变量
${ UI_DIR}
${INCLUDE_DIR}
${RESOURCES_DIR}
${QT_UI_HPP}
${ QT_MOC_HPP}
${QT_RESOURCE_CPP}
6、增加qt库的连接
target_link_libraries(${PROJECT_NAME} PRIVATE QT${QT_VERSION_MAJOR}::Widgets)
5、编译
完成上述修改后,在include文件下进行编译。通过不报错,则说明修改无异常。
cmake_minimum_required(VERSION 3.5)
project(ros2_qt_demo)