导入QuickControls报错,寻求Ubuntu下CMake配置ROS项目的解决方案
解决Qt Quick Controls导入错误与ROS项目CMake配置指南
嘿,我来帮你搞定这个Qt Quick Controls导入的问题,顺便把ROS项目的CMake配置给你捋得明明白白!你的核心问题是CMake里没明确指定Qt Quick相关的依赖模块,再加上ROS和Qt集成的一些细节没处理好,下面一步步来:
一、先把你的CMakeLists.txt改对
我给你写了一份完整的修正版,每部分都标了注释,你直接替换原来的内容就行:
cmake_minimum_required(VERSION 3.0.2) # 把老掉牙的2.8.3升级下,ROS Melodic/Noetic都支持这个版本 project(client_ros) # 1. 先找ROS的核心依赖和Qt集成工具 find_package(catkin REQUIRED COMPONENTS roscpp std_msgs qt_build ) # 2. 重点!必须明确找Qt Quick Controls需要的模块 # 如果你用的是Qt Quick Controls 2就加QuickControls2,用v1就换成QuickControls find_package(Qt5 REQUIRED COMPONENTS Core Quick QuickControls2 Widgets # 要是你混合用了Qt Widget和Quick,就保留;没用就删掉 ) # 3. 配置catkin包的基本信息 catkin_package( INCLUDE_DIRS include LIBRARIES ${PROJECT_NAME} CATKIN_DEPENDS roscpp std_msgs DEPENDS Qt5 ) # 4. 处理Qt的资源文件(.qrc),这步不能少 file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} resources/*.qrc ) qt5_add_resources(QT_RESOURCES_CPP ${QT_RESOURCES}) # 5. 收集你的源码文件(和你原来的写法差不多,稍微调整了格式) file(GLOB_RECURSE SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp include/client_ros/*.hpp include/client_ros/*.h ) # 6. 头文件目录要把Qt的也加上 include_directories( include ${catkin_INCLUDE_DIRS} ${Qt5Core_INCLUDE_DIRS} ${Qt5Quick_INCLUDE_DIRS} ${Qt5QuickControls2_INCLUDE_DIRS} ) # 7. 生成可执行文件,把资源文件也加进去 add_executable(${PROJECT_NAME} ${SOURCES} ${QT_RESOURCES_CPP} ) # 8. 链接依赖库,Qt要用这种命名空间的方式才靠谱 target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} Qt5::Core Qt5::Quick Qt5::QuickControls2 Qt5::Widgets # 没用就删掉 ) # 9. 可选:如果你有带Q_OBJECT宏的Qt类,必须加这步处理MOC # 把下面的路径换成你自己的Qt头文件 qt5_wrap_cpp(MOC_FILES include/client_ros/your_qt_class.hpp ) target_sources(${PROJECT_NAME} PRIVATE ${MOC_FILES})
二、关键修改点给你解释下
- 升级CMake版本:2.8.3太老了,很多新的Qt和ROS特性不支持,换成3.0.2能避免一堆兼容性坑。
- 明确Qt模块:之前你没指定Quick和QuickControls2,CMake根本找不到这些库的头文件,这就是你导入错误的核心原因!
- Qt资源文件处理:
.qrc文件必须用qt5_add_resources转成cpp文件,不然Qt识别不了里面的资源。 - 链接方式:用
Qt5::Core这种方式,CMake会自动帮你找对库的路径,比直接写库名靠谱多了。
三、Ubuntu上先装好依赖包
别忘装Qt Quick Controls的开发包,打开终端跑命令:
- 用Qt Quick Controls 2的话(推荐,功能更多):
sudo apt-get install qtquickcontrols2-5-dev qtdeclarative5-dev
- 用v1版本的话:
sudo apt-get install qtquickcontrols5-dev
四、验证配置的步骤
- 到项目根目录建个
build文件夹,进去后编译:
catkin_make # 要是你用catkin_tools就跑catkin build
- 编译成功后,先source环境再运行节点:
source devel/setup.bash rosrun client_ros client_ros
五、要是还出错怎么办?
- 找不到头文件:检查有没有装对Qt的开发包,CMakeLists里有没有加对
Qt5QuickControls2_INCLUDE_DIRS。 - MOC相关错误:看看你的Qt类有没有加
Q_OBJECT宏,有没有用qt5_wrap_cpp处理对应的头文件。
内容的提问来源于stack exchange,提问作者amir sharifi
相关产品推荐
相关产品推荐

