Skip to content

Commit 6914697

Browse files
authored
Use Qt6 on Rolling and newer distros (#3707)
* Adopt QT_VERSION_MAJOR approach used in rvzi2 * Start using <depend> check on ROS_DISTRO to conditionally require qt5 or qt6 depending on ROS_DISTRO * Explicitly prefer Qt6 when Qt6 and Qt5 are both present to work around the default CMake ascending ordering resolving to Qt5. - For Rolling, Qt6 should be used if both are present - For Jazzy and Kilted, Qt5 should be used if both are present, but this will not cover that edge case * Adopt Timple's approach ros2/rviz#1635 (comment) for supporting edge case for Jazzy/Kilted with both Qt6 and Qt5, where Qt5 should be picked. * Set QT_DIR to fix transitive dependencies that should resolve to Qt6 but incorrectly resolve to Qt5 due to default cmake order resolution
1 parent f1135a4 commit 6914697

File tree

23 files changed

+169
-83
lines changed

23 files changed

+169
-83
lines changed

moveit_ros/visualization/CMakeLists.txt

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,28 @@ find_package(rclpy REQUIRED)
3030
find_package(rviz2 REQUIRED)
3131
find_package(tf2_eigen REQUIRED)
3232
find_package(Eigen3 REQUIRED)
33+
34+
# rviz switched to Qt6 in version 15.1: https://github.com/ros2/rviz/pull/1635
35+
if(rviz2_VERSION VERSION_GREATER_EQUAL 15.1)
36+
find_package(Qt6 REQUIRED COMPONENTS Widgets)
37+
set(QT_VERSION_MAJOR 6)
38+
# Hint for transitive deps that use find_package(QT NAMES Qt6 Qt5 ...) which
39+
# may incorrectly resolve to Qt5 due to CMake's ascending path order
40+
set(QT_DIR "${Qt6_DIR}")
41+
else()
42+
find_package(Qt5 REQUIRED COMPONENTS Widgets)
43+
set(QT_VERSION_MAJOR 5)
44+
endif()
45+
set(QT_LIBRARIES Qt${QT_VERSION_MAJOR}::Widgets)
46+
set(QT_VERSION_NAME Qt${QT_VERSION_MAJOR})
47+
3348
find_package(rviz_common REQUIRED)
3449
find_package(rviz_default_plugins REQUIRED)
3550
find_package(rviz_ogre_vendor REQUIRED)
3651

3752
# Finds Boost Components
3853
include(ConfigExtras.cmake)
3954

40-
# Qt Stuff
41-
find_package(Qt5 ${rviz_QT_VERSION} REQUIRED Core Widgets)
42-
set(QT_LIBRARIES Qt5::Widgets)
43-
# Delegate to QT5 macro
44-
macro(QT_WRAP_UI)
45-
qt5_wrap_ui(${ARGN})
46-
endmacro()
47-
4855
set(CMAKE_INCLUDE_CURRENT_DIR ON)
4956
set(CMAKE_AUTOMOC ON)
5057
set(CMAKE_AUTORCC ON)

moveit_ros/visualization/motion_planning_rviz_plugin/CMakeLists.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ set(HEADERS
44
include/moveit/motion_planning_rviz_plugin/motion_planning_frame_joints_widget.hpp
55
include/moveit/motion_planning_rviz_plugin/motion_planning_param_widget.hpp
66
include/moveit/motion_planning_rviz_plugin/interactive_marker_display.hpp)
7-
qt5_wrap_ui(UIC_FILES src/ui/motion_planning_rviz_plugin_frame.ui
8-
src/ui/motion_planning_rviz_plugin_frame_joints.ui)
7+
qt_wrap_ui(UIC_FILES src/ui/motion_planning_rviz_plugin_frame.ui
8+
src/ui/motion_planning_rviz_plugin_frame_joints.ui)
99

1010
include_directories(${CMAKE_CURRENT_BINARY_DIR})
1111

@@ -38,7 +38,7 @@ ament_target_dependencies(
3838
moveit_ros_warehouse
3939
rviz2
4040
rviz_ogre_vendor
41-
Qt5
41+
${QT_VERSION_NAME}
4242
pluginlib)
4343
target_include_directories(moveit_motion_planning_rviz_plugin_core
4444
PRIVATE "${OGRE_PREFIX_DIR}/include")

moveit_ros/visualization/motion_planning_rviz_plugin/src/motion_planning_frame.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ MotionPlanningFrame::MotionPlanningFrame(MotionPlanningDisplay* pdisplay, rviz_c
206206
connect(ui_->wsize_y, SIGNAL(valueChanged(double)), this, SIGNAL(configChanged()));
207207
connect(ui_->wsize_z, SIGNAL(valueChanged(double)), this, SIGNAL(configChanged()));
208208

209-
QShortcut* copy_object_shortcut = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_C), ui_->collision_objects_list);
209+
QShortcut* copy_object_shortcut = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_C), ui_->collision_objects_list);
210210
connect(copy_object_shortcut, SIGNAL(activated()), this, SLOT(copySelectedCollisionObject()));
211211

212212
ui_->reset_db_button->hide();

moveit_ros/visualization/motion_planning_rviz_plugin/src/motion_planning_frame_joints_widget.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,11 @@ bool JointsWidgetEventFilter::eventFilter(QObject* /*target*/, QEvent* event)
486486
if (event->type() == QEvent::MouseButtonPress)
487487
{
488488
QAbstractItemView* view = qobject_cast<QAbstractItemView*>(parent());
489+
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
490+
QModelIndex index = view->indexAt(static_cast<QMouseEvent*>(event)->position().toPoint());
491+
#else
489492
QModelIndex index = view->indexAt(static_cast<QMouseEvent*>(event)->pos());
493+
#endif
490494
if (index.flags() & Qt::ItemIsEditable) // mouse event on any editable slider?
491495
{
492496
view->setCurrentIndex(index);
@@ -529,7 +533,11 @@ void ProgressBarEditor::mousePressEvent(QMouseEvent* event)
529533

530534
void ProgressBarEditor::mouseMoveEvent(QMouseEvent* event)
531535
{
536+
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
537+
double v = std::min(max_, std::max(min_, min_ + event->position().x() * (max_ - min_) / width()));
538+
#else
532539
double v = std::min(max_, std::max(min_, min_ + event->x() * (max_ - min_) / width()));
540+
#endif
533541
if (value_ != v)
534542
{
535543
value_ = v;

moveit_ros/visualization/package.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@
2525

2626
<build_depend>class_loader</build_depend>
2727
<build_depend>eigen</build_depend>
28-
<build_depend>libqt5-opengl-dev</build_depend>
29-
<build_depend>qtbase5-dev</build_depend>
28+
<build_depend condition="$ROS_DISTRO == humble or $ROS_DISTRO == jazzy or $ROS_DISTRO == kilted">qtbase5-dev</build_depend>
29+
<build_depend condition="$ROS_DISTRO == humble or $ROS_DISTRO == jazzy or $ROS_DISTRO == kilted">libqt5-opengl-dev</build_depend>
30+
<build_depend condition="$ROS_DISTRO != humble and $ROS_DISTRO != jazzy and $ROS_DISTRO != kilted">qt6-base-dev</build_depend>
3031

3132
<depend>geometric_shapes</depend>
3233
<depend>interactive_markers</depend>

moveit_ros/visualization/planning_scene_rviz_plugin/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ add_library(moveit_planning_scene_rviz_plugin SHARED src/plugin_init.cpp)
2727
set_target_properties(moveit_planning_scene_rviz_plugin
2828
PROPERTIES VERSION "${${PROJECT_NAME}_VERSION}")
2929
target_link_libraries(moveit_planning_scene_rviz_plugin
30-
moveit_planning_scene_rviz_plugin_core Qt5::Widgets)
30+
moveit_planning_scene_rviz_plugin_core ${QT_LIBRARIES})
3131
ament_target_dependencies(moveit_planning_scene_rviz_plugin pluginlib
3232
rviz_ogre_vendor)
3333
target_include_directories(moveit_planning_scene_rviz_plugin

moveit_ros/visualization/rviz_plugin_render_tools/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ add_library(
2424
set_target_properties(moveit_rviz_plugin_render_tools
2525
PROPERTIES VERSION "${${PROJECT_NAME}_VERSION}")
2626

27-
target_link_libraries(moveit_rviz_plugin_render_tools Qt5::Widgets)
27+
target_link_libraries(moveit_rviz_plugin_render_tools ${QT_LIBRARIES})
2828

2929
ament_target_dependencies(
3030
moveit_rviz_plugin_render_tools

moveit_setup_assistant/moveit_setup_app_plugins/CMakeLists.txt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,18 @@ moveit_package()
88
find_package(ament_cmake REQUIRED)
99
find_package(ament_cmake_ros REQUIRED)
1010
find_package(ament_index_cpp REQUIRED)
11+
# rviz switched to Qt6 in version 15.1: https://github.com/ros2/rviz/pull/1635
12+
find_package(rviz2 QUIET)
13+
if(rviz2_VERSION VERSION_GREATER_EQUAL 15.1)
14+
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
15+
set(QT_VERSION_MAJOR 6)
16+
# Hint for transitive deps that use find_package(QT NAMES Qt6 Qt5 ...) which
17+
# may incorrectly resolve to Qt5 due to CMake's ascending path order
18+
set(QT_DIR "${Qt6_DIR}")
19+
else()
20+
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
21+
set(QT_VERSION_MAJOR 5)
22+
endif()
1123
find_package(moveit_ros_visualization REQUIRED)
1224
find_package(moveit_setup_framework REQUIRED)
1325
find_package(pluginlib REQUIRED)
@@ -17,9 +29,6 @@ find_package(rclcpp REQUIRED)
1729
set(CMAKE_AUTOMOC ON)
1830
add_definitions(-DQT_NO_KEYWORDS)
1931

20-
qt5_wrap_cpp(MOC_FILES include/moveit_setup_app_plugins/launches_widget.hpp
21-
include/moveit_setup_app_plugins/perception_widget.hpp)
22-
2332
add_library(
2433
moveit_setup_app_plugins
2534
src/launches.cpp
@@ -28,7 +37,8 @@ add_library(
2837
src/perception_config.cpp
2938
src/perception.cpp
3039
src/perception_widget.cpp
31-
${MOC_FILES})
40+
include/moveit_setup_app_plugins/launches_widget.hpp
41+
include/moveit_setup_app_plugins/perception_widget.hpp)
3242
target_include_directories(
3343
moveit_setup_app_plugins
3444
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>

moveit_setup_assistant/moveit_setup_assistant/CMakeLists.txt

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,30 @@ moveit_package()
99
find_package(ament_cmake REQUIRED)
1010
find_package(ament_index_cpp REQUIRED)
1111
find_package(Boost REQUIRED program_options)
12+
# rviz switched to Qt6 in version 15.1: https://github.com/ros2/rviz/pull/1635
13+
find_package(rviz2 QUIET)
14+
if(rviz2_VERSION VERSION_GREATER_EQUAL 15.1)
15+
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
16+
set(QT_VERSION_MAJOR 6)
17+
# Hint for transitive deps that use find_package(QT NAMES Qt6 Qt5 ...) which
18+
# may incorrectly resolve to Qt5 due to CMake's ascending path order
19+
set(QT_DIR "${Qt6_DIR}")
20+
else()
21+
find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
22+
set(QT_VERSION_MAJOR 5)
23+
endif()
1224
find_package(moveit_setup_framework REQUIRED)
1325
find_package(moveit_setup_srdf_plugins REQUIRED)
1426
find_package(pluginlib REQUIRED)
15-
find_package(Qt5Core REQUIRED)
16-
find_package(Qt5Widgets REQUIRED)
1727
find_package(rclcpp REQUIRED)
1828

1929
set(THIS_PACKAGE_INCLUDE_DEPENDS
2030
ament_index_cpp
2131
moveit_setup_framework
2232
moveit_setup_srdf_plugins
2333
pluginlib
24-
Qt5Core
25-
Qt5Widgets
34+
Qt${QT_VERSION_MAJOR}Core
35+
Qt${QT_VERSION_MAJOR}Widgets
2636
rclcpp)
2737

2838
# Header files that need Qt Moc pre-processing for use with Qt signals, etc:
@@ -32,11 +42,9 @@ set(HEADERS include/moveit_setup_assistant/navigation_widget.hpp
3242
set(CMAKE_AUTOMOC ON)
3343
add_definitions(-DQT_NO_KEYWORDS)
3444

35-
qt5_wrap_cpp(MOC_FILES ${HEADERS})
36-
3745
add_executable(
3846
moveit_setup_assistant src/main.cpp src/setup_assistant_widget.cpp
39-
src/navigation_widget.cpp ${MOC_FILES})
47+
src/navigation_widget.cpp ${HEADERS})
4048
target_include_directories(
4149
moveit_setup_assistant
4250
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
@@ -53,6 +61,7 @@ target_include_directories(
5361

5462
ament_target_dependencies(moveit_setup_assistant_updater
5563
${THIS_PACKAGE_INCLUDE_DEPENDS})
64+
target_link_libraries(moveit_setup_assistant_updater ${Boost_LIBRARIES})
5665

5766
set_target_properties(moveit_setup_assistant_updater
5867
PROPERTIES OUTPUT_NAME collisions_updater PREFIX "")

moveit_setup_assistant/moveit_setup_assistant/package.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323

2424
<depend>ament_index_cpp</depend>
2525
<depend>pluginlib</depend>
26-
<depend>qtbase5-dev</depend>
26+
<depend condition="$ROS_DISTRO == humble or $ROS_DISTRO == jazzy or $ROS_DISTRO == kilted">qtbase5-dev</depend>
27+
<depend condition="$ROS_DISTRO != humble and $ROS_DISTRO != jazzy and $ROS_DISTRO != kilted">qt6-base-dev</depend>
2728
<depend>rclcpp</depend>
2829
<depend>moveit_setup_framework</depend>
2930
<depend>moveit_setup_srdf_plugins</depend> <!-- For collision_updater executable -->

0 commit comments

Comments
 (0)