【问题标题】:qt-quick(qml) application can't subscribe ros topicqt-quick(qml) 应用程序无法订阅 ros 主题
【发布时间】:2016-03-14 08:39:02
【问题描述】:

看完下面的视频教程,

https://youtu.be/NG05o_SV1iw

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

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

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

【问题讨论】:

    标签: cmake qmake ros qt-quick catkin


    【解决方案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})
    

    source article有更详细的解释。但基本上重要的部分是:

    find_package(Qt5 COMPONENTS Core Qml Quick REQUIRED)
    

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

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

    【讨论】:

      【解决方案2】:

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

      此外,它还附带一个 ros_create_qt_package 命令,该命令创建一个 Qt GUI 模板和已经准备好的 ROS 包,因此您只需按照自己的意愿定制它。

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

      干杯,

      【讨论】:

      • 值得提醒人们ros_create_qt_package创建了一个Qt 4包,所以你不能将它与QML一起使用,你也不能链接到最新版本的rqt、qviz 或其他使用 Qt 5 的工具。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2014-01-20
      • 2013-11-10
      相关资源
      最近更新 更多