1

看完下面的视频教程,

https://youtu.be/NG05o_SV1iw

我可以从“Qt Creator”中学习如何打开 catkin 项目。现在我需要让 Qt-Quick 应用程序订阅 ros 主题。但是,我不知道怎么做。关于这个问题的一些事实是:

  • Qt-Quick 应用程序是使用 qmake 编译的
  • catkin项目使用cmake编译(*在catkin项目中可以订阅ros主题。)

简而言之,请告诉我“如何使用 cmake 编译 qt-quick 应用程序。

4

2 回答 2

1

这是一个示例 CMakeList.txt 文件,可用于在 ROS 中编译 QT 应用程序。它适用于 QT5(ros qt 包似乎只支持 qt4)

要使其适用于您的项目,只需替换您的 CMakeList.txt 文件并更改所有路径/项目名称:

##############################################################################
# CMake
##############################################################################

cmake_minimum_required(VERSION 2.8.0)
project(gui)

##############################################################################
# Catkin
##############################################################################

# qt_build provides the qt cmake glue, roscpp the comms for a default talker
find_package(catkin REQUIRED COMPONENTS qt_build roscpp sensor_msgs image_transport)
set(QML_IMPORT_PATH "${QML_IMPORT_PATH};${CATKIN_GLOBAL_LIB_DESTINATION}" )
set(QML_IMPORT_PATH2 "${QML_IMPORT_PATH};${CATKIN_GLOBAL_LIB_DESTINATION}" )
include_directories(${catkin_INCLUDE_DIRS})
# Use this to define what the package will export (e.g. libs, headers).
# Since the default here is to produce only a binary, we don't worry about
# exporting anything. 
catkin_package()

##############################################################################
# Qt Environment
##############################################################################

# this comes from qt_build's qt-ros.cmake which is automatically 
# included via the dependency ca ll in package.xml
#rosbuild_prepare_qt4(QtCore QtGui QtQml QtQuick) # Add the appropriate components to the component list here
find_package(Qt5 COMPONENTS Core Gui Qml Quick REQUIRED)

##############################################################################
# Sections
##############################################################################

file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} resources/*.qrc)
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS include/gui/*.hpp)

QT5_ADD_RESOURCES(QT_RESOURCES_CPP ${QT_RESOURCES})
QT5_WRAP_CPP(QT_MOC_HPP ${QT_MOC})

##############################################################################
# Sources
##############################################################################

file(GLOB_RECURSE QT_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp)

##############################################################################
# Binaries
##############################################################################

add_executable(gui ${QT_SOURCES} ${QT_RESOURCES_CPP} ${QT_FORMS_HPP} ${QT_MOC_HPP})
qt5_use_modules(gui Quick Core)
target_link_libraries(gui ${QT_LIBRARIES} ${catkin_LIBRARIES})
target_include_directories(gui PUBLIC include)
install(TARGETS gui RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

源文章中有更详细的解释。但基本上重要的部分是:

find_package(Qt5 COMPONENTS Core Qml Quick REQUIRED)

其中导入 Qt5 核心、qml 和快速组件。如果您不使用 qml,您可以安全地删除该部分。您还应该能够在此处添加其他 qml 组件。

cmake 列表中的其他 qt5 函数确实像在头文件上运行 qt5 prepossessor 一样。

于 2017-09-10T04:07:14.257 回答
0

如果您正在尝试连接 Qt GUI 界面并与 ROS 进行通信,您可以查看这个ROS Qt包。它有一个关于如何实现这一目标的教程和模板。它也可以用作您项目的起点。

此外,它带有一个 ros_create_qt_package 命令,它创建了一个 Qt GUI 模板和已经准备好的 ROS 包,所以你只需按照你的意愿定制它。

最后,只需要一个普通的 catkin_make ,所以你不会迷失在所有不同的 make 命令之间(感谢 CMakeLists !)。

干杯,

于 2016-03-16T14:30:08.457 回答