CMAKE 构建 QT(带ROS插件)

本文详细介绍如何在ROS项目中集成Qt,包括设置CMakeLists.txt文件,添加Qt支持,以及链接必要的库。通过具体示例,展示了如何创建带有GUI的ROS节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cmake_minimum_required(VERSION 2.8.3)
project(test1)

## Compile as C++11, supported in ROS Kinetic and newer add_compile_options(-std=c++11)
set (CMAKE_PREFIX_PATH "/home/su/Qt5.8.0/5.8/gcc_64")
find_package(catkin REQUIRED COMPONENTS roscpp  std_msgs )
find_package(Qt5Widgets)
find_package(Qt5Core)
find_package(Qt5Gui)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(SOURCES src/qt_app_node.cpp src/mainwindow.cpp )
set(FORMS src/mainwindow.ui )
set(HEADERS src/mainwindow.h qt_app/qt_app_node.h)

catkin_package(
    # INCLUDE_DIRS include
    # LIBRARIES qt_app
    # CATKIN_DEPENDS roscpp rospy std_msgs
    # DEPENDS system_lib
    )

    qt5_wrap_ui(UIC ${FORMS} )

    include_directories( include/qt_app ${catkin_INCLUDE_DIRS} )

    add_executable(${PROJECT_NAME}_node ${SOURCES} ${FORMS} ${HEADERS}  ${UIC})

    target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES} )
    target_link_libraries(${PROJECT_NAME}_node Qt5::Widgets )


## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)


## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# catkin_python_setup()

################################################
## Declare ROS messages, services and actions ##
################################################

## To declare and build messages, services or actions from within this
## package, follow these steps:
## * Let MSG_DEP_SET be the set of packages whose message types you use in
##   your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
## * In the file package.xml:
##   * add a build_depend tag for "message_generation"
##   * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
##   * If MSG_DEP_SET isn't empty the following dependency has been pulled in
##     but can be declared for certainty nonetheless:
##     * add a exec_depend tag for "message_runtime"
## * In this file (CMakeLists.txt):
##   * add "message_generation" and every package in MSG_DEP_SET to
##     find_package(catkin REQUIRED COMPONENTS ...)
##   * add "message_runtime" and every package in MSG_DEP_SET to
##     catkin_package(CATKIN_DEPENDS ...)
##   * uncomment the add_*_files sections below as needed
##     and list every .msg/.srv/.action file to be processed
##   * uncomment the generate_messages entry below
##   * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)

## Generate messages in the 'msg' folder
# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )

## Generate services in the 'srv' folder
# add_service_files(
#   FILES
#   Service1.srv
#   Service2.srv
# )

## Generate actions in the 'action' folder
# add_action_files(
#   FILES
#   Action1.action
#   Action2.action
# )

## Generate added messages and services with any dependencies listed here
# generate_messages(
#   DEPENDENCIES
#   std_msgs  # Or other packages containing msgs
# )

################################################
## Declare ROS dynamic reconfigure parameters ##
################################################

## To declare and build dynamic reconfigure parameters within this
## package, follow these steps:
## * In the file package.xml:
##   * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
## * In this file (CMakeLists.txt):
##   * add "dynamic_reconfigure" to
##     find_package(catkin REQUIRED COMPONENTS ...)
##   * uncomment the "generate_dynamic_reconfigure_options" section below
##     and list every .cfg file to be processed

## Generate dynamic reconfigure parameters in the 'cfg' folder
# generate_dynamic_reconfigure_options(
#   cfg/DynReconf1.cfg
#   cfg/DynReconf2.cfg
# )

###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES test1
#  CATKIN_DEPENDS roscpp
#  DEPENDS system_lib
)

###########
## Build ##
###########

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

add_executable(node1 src/node1.cpp)
target_link_libraries(node1
    ${catkin_LIBRARIES}
    )

## Declare a C++ library
# add_library(${PROJECT_NAME}
#   src/${PROJECT_NAME}/test1.cpp
# )

## Add cmake target dependencies of the library
## as an example, code may need to be generated before libraries
## either from message generation or dynamic reconfigure
# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
# add_executable(${PROJECT_NAME}_node src/test1_node.cpp)

## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")

## Add cmake target dependencies of the executable
## same as for the library above
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

## Specify libraries to link a library or executable target against
# target_link_libraries(${PROJECT_NAME}_node
#   ${catkin_LIBRARIES}
# )

#############
## Install ##
#############

# all install targets should use catkin DESTINATION variables
# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html

## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
# install(PROGRAMS
#   scripts/my_python_script
#   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )

## Mark executables and/or libraries for installation
# install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node
#   ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
#   LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
#   RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
# )

## Mark cpp header files for installation
# install(DIRECTORY include/${PROJECT_NAME}/
#   DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
#   FILES_MATCHING PATTERN "*.h"
#   PATTERN ".svn" EXCLUDE
# )

## Mark other files for installation (e.g. launch and bag files, etc.)
# install(FILES
#   # myfile1
#   # myfile2
#   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
# )

#############
## Testing ##
#############

## Add gtest based cpp test target and link libraries
# catkin_add_gtest(${PROJECT_NAME}-test test/test_test1.cpp)
# if(TARGET ${PROJECT_NAME}-test)
#   target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
# endif()

## Add folders to be run by python nosetests
# catkin_add_nosetests(test)

 

<think>我们正在处理用户关于在Ubuntu 20.04上离线安装QtROS插件的查询。根据引用内容,我们可以总结以下步骤: 1. **下载Qt Creator 12.0**:因为ROS插件支持的Qt Creator版本有限(最多到12),所以需要先下载Qt Creator 12.0的离线安装包。 2. **下载Qt 5.12.12离线安装包**:用户需要Qt5,因此下载Qt 5.12.12的离线版本。 3. **安装依赖**:在安装Qt之前,需要安装一些依赖库(如引用[2]中提到的)。 4. **安装Qt Creator 12.0和Qt 5.12.12**:分别安装这两个组件。注意,安装顺序可能不是关键(引用[1]中提到先安装Qt Creator,但后来发现不一定必须)。 5. **解决可能的问题**:安装后如果Qt Creator打不开,尝试安装`libxcb-cursor0`(引用[1])。 6. **安装ROS插件**:按照引用[1]中的方法,从GitHub仓库(ros-industrial/ros_qtc_plugin)安装ROS插件。 7. **配置环境**:在Qt Creator中配置ROS环境,包括设置CMake变量(如引用[3]所示)。 现在,我们为用户提供一个详细的离线安装步骤。由于是离线安装,我们需要提前下载好所有必要的安装包和依赖。 ### 详细步骤 #### 1. 准备工作:下载离线安装包 - 从Qt官网下载Qt Creator 12.0的离线安装包(例如:`qt-creator-opensource-linux-x86_64-12.0.0.run`)。 - 下载Qt 5.12.12的离线安装包(例如:`qt-opensource-linux-x64-5.12.12.run`)。 - 下载ROS插件的离线安装包(由于是GitHub仓库,需要提前下载好插件的发布版本,例如`.deb`文件或源码包)。但注意,通常ROS插件是通过在线方式安装的,离线安装可能需要下载所有依赖。我们可以从[GitHub发布页面](https://github.com/ros-industrial/ros_qtc_plugin/releases)下载对应版本的插件(如`ros_qtc_plugin-5.0.2-202308111111-Linux-x86_64.deb`,具体版本需匹配Qt Creator 12.0)。 #### 2. 安装依赖 在离线环境下,我们需要提前下载好所有依赖的.deb包。根据引用[2],安装Qt所需的依赖包括: ``` libgl1-mesa-dev, ninja-build, libyaml-cpp-dev, libqtermwidget5-0-dev, libutf8proc-dev ``` 此外,根据引用[1]还需要`libxcb-cursor0`(可能用于解决启动问题)。 在离线环境中,我们可以在一台联网的相同系统(Ubuntu 20.04)上下载这些包及其依赖: ```bash # 在一台联网的Ubuntu 20.04机器上执行 mkdir qt_deps cd qt_deps apt download libgl1-mesa-dev ninja-build libyaml-cpp-dev libqtermwidget5-0-dev libutf8proc-dev libxcb-cursor0 ``` 然后将`qt_deps`目录拷贝到离线机器上,并使用以下命令安装: ```bash sudo dpkg -i *.deb ``` #### 3. 安装Qt Creator 12.0 - 给安装文件执行权限: ```bash chmod +x qt-creator-opensource-linux-x86_64-12.0.0.run ``` - 运行安装程序: ```bash ./qt-creator-opensource-linux-x86_64-12.0.0.run ``` 按照图形界面的指示完成安装。 #### 4. 安装Qt 5.12.12 - 给安装文件执行权限: ```bash chmod +x qt-opensource-linux-x64-5.12.12.run ``` - 运行安装程序: ```bash ./qt-opensource-linux-x64-5.12.12.run ``` 在安装过程中,选择安装路径(建议使用默认路径)并选择组件(至少包括桌面开发所需的组件)。 #### 5. 安装ROS插件 由于是离线安装,我们使用之前下载的ROS插件.deb文件(假设为`ros_qtc_plugin-5.0.2-202308111111-Linux-x86_64.deb`)进行安装: ```bash sudo dpkg -i ros_qtc_plugin-5.0.2-202308111111-Linux-x86_64.deb ``` 如果遇到依赖问题,需要提前下载并安装这些依赖(方法同步骤2)。 #### 6. 配置Qt Creator - 启动Qt Creator 12.0(如果启动有问题,尝试安装`libxcb-cursor0`)。 - 配置Qt版本:在Qt Creator中,进入`工具`->`选项`->`Kits`->`Qt Versions`,添加Qt 5.12.12的qmake路径(例如`/opt/Qt5.12.12/5.12.12/gcc_64/bin/qmake`)。 - 配置ROS环境(引用[3]): 在打开ROS工程时,需要设置CMake变量。在`Projects`->`Build Settings`中,添加以下变量: ``` CMAKE_PREFIX_PATH: /opt/ros/noetic QT_QMAKE_EXECUTABLE: <Qt安装路径>/5.12.12/gcc_64/bin/qmake ``` 同时,确保编译器设置正确(通常会自动检测)。 #### 7. 测试 创建一个简单的ROS项目,测试是否能够正常编译和运行。 ### 注意事项 - 离线安装需要提前准备好所有安装包和依赖包,避免遗漏。 - 如果系统中存在多个版本的Qt Creator,启动时可能会混淆。建议通过直接运行安装目录下的Qt Creator可执行文件(如`~/Qt/Tools/QtCreator/bin/qtcreator`)来启动指定版本[^1]。 - 安装过程中如果遇到问题,可以查看引用[1][2][3]中的详细步骤。 §§相关问题§§ 1. 如何解决Ubuntu 20.04上安装Qt Creator后无法启动的问题? 2. 在Qt Creator中如何配置ROS工作空间的构建环境? 3. 如何为Qt Creator安装其他插件或扩展?</think>### Ubuntu 20.04 离线安装 QtROS 插件完整指南 #### **核心步骤** 1. **下载离线安装包** - Qt Creator 12.0:[官网下载](https://download.qt.io/archive/qtcreator/)(选择 `qt-creator-opensource-linux-x86_64-12.0.0.run`) - Qt 5.12.12:[官网下载](https://download.qt.io/archive/qt/5.12/5.12.12/)(选择 `qt-opensource-linux-x64-5.12.12.run`) - ROS 插件:[GitHub 发布页](https://github.com/ros-industrial/ros_qtc_plugin/releases)(选择匹配 Qt Creator 12.0 的 `.deb` 文件) 2. **安装依赖(离线包需提前下载)** ```bash # 需包含以下依赖的 .deb 文件(在联网机提前下载): sudo dpkg -i libgl1-mesa-dev*.deb ninja-build*.deb libyaml-cpp-dev*.deb \ libqtermwidget5-0-dev*.deb libutf8proc-dev*.deb libxcb-cursor0*.deb ``` 3. **安装 Qt Creator 12.0** ```bash chmod +x qt-creator-opensource-linux-x86_64-12.0.0.run ./qt-creator-opensource-linux-x86_64-12.0.0.run ``` 4. **安装 Qt 5.12.12** ```bash chmod +x qt-opensource-linux-x64-5.12.12.run ./qt-opensource-linux-x64-5.12.12.run ``` 5. **安装 ROS 插件** ```bash sudo dpkg -i ros_qtc_plugin-*.deb # 替换为下载的插件文件名 ``` 6. **配置 Qt Creator** - 启动 Qt Creator:`~/Qt/Tools/QtCreator/bin/qtcreator`(避免版本冲突[^1]) - 设置 ROS 路径: ```plaintext 工具 → 选项 → Kits → CMake 配置 添加变量: CMAKE_PREFIX_PATH: /opt/ros/noetic QT_QMAKE_EXECUTABLE: <Qt安装路径>/5.12.12/gcc_64/bin/qmake ``` #### **关键问题解决** - **Qt Creator 启动失败**: ```bash sudo apt install libxcb-cursor0 # 离线需提前下载 .deb 文件[^1] ``` - **多版本冲突**: 直接运行安装路径下的可执行文件(如 `~/Qt/Tools/QtCreator/bin/qtcreator`)[^1]。 #### **验证安装** ```bash # 创建测试 ROS 工作空间 mkdir -p ~/test_ws/src cd ~/test_ws && catkin_make # 在 Qt Creator 中:文件 → 打开文件或项目 → 选择 ~/test_ws/src/CMakeLists.txt ``` 成功加载 ROS 工程即表示配置完成。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值