Skip to content

Commit 978dce2

Browse files
committed
Support Qt6
Signed-off-by: Alejandro Hernández Cordero <ahcorde@gmail.com>
1 parent 9a3e552 commit 978dce2

13 files changed

+73
-37
lines changed

qt_gui_cpp/CMakeLists.txt

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ endif()
99

1010
find_package(ament_cmake REQUIRED)
1111

12+
# set(CMAKE_SKIP_BUILD_RPATH FALSE)
13+
# set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
14+
# set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
15+
16+
set(CMAKE_AUTOMOC ON)
17+
set(CMAKE_AUTORCC ON)
18+
set(CMAKE_AUTOUIC ON)
19+
1220
if(WIN32)
1321
message(STATUS "${PROJECT_NAME} is not yet supported on Windows. Package will not be built.")
1422
ament_package()
@@ -20,7 +28,8 @@ if(WIN32)
2028
endif()
2129

2230
find_package(pluginlib REQUIRED)
23-
find_package(Qt5 REQUIRED COMPONENTS Widgets)
31+
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Core)
32+
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Core)
2433
find_package(tinyxml2_vendor REQUIRED)
2534
find_package(TinyXML2 REQUIRED)
2635

@@ -44,7 +53,12 @@ set(qt_gui_cpp_HDRS
4453
include/qt_gui_cpp/plugin_context.h
4554
)
4655

47-
qt5_wrap_cpp(qt_gui_cpp_MOCS ${qt_gui_cpp_HDRS})
56+
if (${QT_VERSION_MAJOR} GREATER "5")
57+
qt_standard_project_setup()
58+
qt_wrap_cpp(turtlesim_node_MOCS ${qt_gui_cpp_HDRS})
59+
else()
60+
qt5_wrap_cpp(turtlesim_node_MOCS ${qt_gui_cpp_HDRS})
61+
endif()
4862

4963
add_library(${PROJECT_NAME} SHARED ${qt_gui_cpp_SRCS} ${qt_gui_cpp_MOCS})
5064
target_include_directories(${PROJECT_NAME} PUBLIC
@@ -54,17 +68,17 @@ target_include_directories(${PROJECT_NAME} PUBLIC
5468
target_link_libraries(${PROJECT_NAME}
5569
${QT_QTCORE_LIBRARY}
5670
${QT_QTGUI_LIBRARY}
57-
Qt5::Widgets
71+
Qt${QT_VERSION_MAJOR}::Widgets
5872
pluginlib::pluginlib
5973
tinyxml2::tinyxml2)
6074

6175
add_subdirectory(src/qt_gui_cpp_shiboken)
6276
add_subdirectory(src/qt_gui_cpp_sip)
6377

64-
message(STATUS "Python binding generators: ${qt_gui_cpp_BINDINGS}")
65-
if(NOT qt_gui_cpp_BINDINGS)
66-
message(FATAL_ERROR "No Python binding generator found.")
67-
endif()
78+
# message(STATUS "Python binding generators: ${qt_gui_cpp_BINDINGS}")
79+
# if(NOT qt_gui_cpp_BINDINGS)
80+
# message(FATAL_ERROR "No Python binding generator found.")
81+
# endif()
6882

6983
install(FILES plugin.xml
7084
DESTINATION share/${PROJECT_NAME})

qt_gui_cpp/include/qt_gui_cpp/plugin_provider.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
#include "plugin_descriptor.h"
3939

4040
#include <QList>
41-
#include <QMap>
41+
#include <QMultiMap>
4242
#include <QString>
4343

4444
namespace qt_gui_cpp
@@ -53,7 +53,7 @@ class PluginProvider
5353

5454
virtual ~PluginProvider();
5555

56-
virtual QMap<QString, QString> discover(QObject* discovery_data);
56+
virtual QMultiMap<QString, QString> discover(QObject* discovery_data);
5757

5858
/**
5959
* @attention Ownership of returned PluginDescriptor's is transfered to the caller

qt_gui_cpp/include/qt_gui_cpp/recursive_plugin_provider.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class RecursivePluginProvider
5353

5454
virtual ~RecursivePluginProvider();
5555

56-
virtual QMap<QString, QString> discover(QObject* discovery_data);
56+
virtual QMultiMap<QString, QString> discover(QObject* discovery_data);
5757

5858
virtual void shutdown();
5959

qt_gui_cpp/include/qt_gui_cpp/ros_pluginlib_plugin_provider.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class RosPluginlibPluginProvider
9292
}
9393
}
9494

95-
virtual QMap<QString, QString> discover(QObject* discovery_data)
95+
virtual QMultiMap<QString, QString> discover(QObject* discovery_data)
9696
{
9797
return PluginProvider::discover(discovery_data);
9898
}

qt_gui_cpp/src/qt_gui_cpp/plugin_context.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,25 +62,25 @@ const QStringList& PluginContext::argv() const
6262

6363
void PluginContext::addWidget(QWidget* widget)
6464
{
65-
bool rc = proxy_.invokeMethod("add_widget", Q_ARG(QWidget*, widget));
65+
bool rc = QMetaObject::invokeMethod(proxy_.proxiedObject(), "add_widget", Qt::DirectConnection, Q_ARG(QWidget*, widget));
6666
if (!rc) throw std::runtime_error("PluginContext::addWidget() invoke method failed");
6767
}
6868

6969
void PluginContext::removeWidget(QWidget* widget)
7070
{
71-
bool rc = proxy_.invokeMethod("remove_widget", Q_ARG(QWidget*, widget));
71+
bool rc = QMetaObject::invokeMethod(proxy_.proxiedObject(), "remove_widget", Qt::DirectConnection, Q_ARG(QWidget*, widget));
7272
if (!rc) throw std::runtime_error("PluginContext::removeWidget() invoke method failed");
7373
}
7474

7575
void PluginContext::closePlugin()
7676
{
77-
bool rc = proxy_.invokeMethod("close_plugin");
77+
bool rc = QMetaObject::invokeMethod(proxy_.proxiedObject(), "close_plugin", Qt::DirectConnection);
7878
if (!rc) throw std::runtime_error("PluginContext::closePlugin() invoke method failed");
7979
}
8080

8181
void PluginContext::reloadPlugin()
8282
{
83-
bool rc = proxy_.invokeMethod("reload_plugin");
83+
bool rc = QMetaObject::invokeMethod(proxy_.proxiedObject(), "reload_plugin", Qt::DirectConnection);
8484
if (!rc) throw std::runtime_error("PluginContext::reloadPlugin() invoke method failed");
8585
}
8686

qt_gui_cpp/src/qt_gui_cpp/plugin_provider.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,19 @@ PluginProvider::PluginProvider()
4040
PluginProvider::~PluginProvider()
4141
{}
4242

43-
QMap<QString, QString> PluginProvider::discover(QObject* discovery_data)
43+
QMultiMap<QString, QString> PluginProvider::discover(QObject* discovery_data)
4444
{
4545
QMultiMap<QString, QString> plugins;
4646
QList<PluginDescriptor*> descriptors = discover_descriptors(discovery_data);
4747
for (QList<PluginDescriptor*>::iterator it = descriptors.begin(); it != descriptors.end(); it++)
4848
{
4949
// extract plugin descriptor dictionary
5050
PluginDescriptor* descriptor = *it;
51-
QMap<QString, QString> plugin = descriptor->toDictionary();
52-
plugins.unite(plugin);
51+
QMap descriptorValue = descriptor->toDictionary();
52+
QMultiMap<QString, QString> plugin;
53+
for (auto i = descriptorValue.cbegin(), end = descriptorValue.cend(); i != end; ++i) {
54+
plugin.insert(i.key(), i.value());
55+
}
5356
delete descriptor;
5457
}
5558
return plugins;

qt_gui_cpp/src/qt_gui_cpp/recursive_plugin_provider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ RecursivePluginProvider::~RecursivePluginProvider()
4646
delete plugin_provider_;
4747
}
4848

49-
QMap<QString, QString> RecursivePluginProvider::discover(QObject* discovery_data)
49+
QMultiMap<QString, QString> RecursivePluginProvider::discover(QObject* discovery_data)
5050
{
5151
// discover plugins, which are providers themselves
5252
QList<PluginDescriptor*> descriptors = plugin_provider_->discover_descriptors(discovery_data);

qt_gui_cpp/src/qt_gui_cpp/settings.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,59 +43,71 @@ Settings::Settings(QObject* obj)
4343
Settings Settings::getSettings(const QString& prefix)
4444
{
4545
Settings settings(proxy_.proxiedObject());
46-
bool rc = proxy_.invokeMethodWithReturn("get_settings", Q_RETURN_ARG(Settings, settings), Q_ARG(QString, prefix));
46+
bool rc = QMetaObject::invokeMethod(proxy_.proxiedObject(), "get_settings", Qt::DirectConnection, Q_RETURN_ARG(Settings, settings), Q_ARG(QString, prefix));
47+
// bool rc = proxy_.invokeMethodWithReturn("get_settings", Q_RETURN_ARG(Settings, settings), Q_ARG(QString, prefix));
4748
if (!rc) throw std::runtime_error("Settings::get_settings() invoke method failed");
4849
return settings;
4950
}
5051

5152
QStringList Settings::allKeys() const
5253
{
5354
QStringList list;
54-
bool rc = const_cast<Settings*>(this)->proxy_.invokeMethodWithReturn("all_keys", Q_RETURN_ARG(QStringList, list));
55+
bool rc;
56+
57+
// bool rc = QMetaObject::invokeMethod(proxy_.proxiedObject(), "all_keys", Qt::DirectConnection, Q_RETURN_ARG(QStringList, list));
58+
// bool rc = const_cast<Settings*>(this)->proxy_.invokeMethodWithReturn("all_keys", Q_RETURN_ARG(QStringList, list));
5559
if (!rc) throw std::runtime_error("Settings::all_keys() invoke method failed");
5660
return list;
5761
}
5862

5963
QStringList Settings::childGroups() const
6064
{
6165
QStringList list;
62-
bool rc = const_cast<Settings*>(this)->proxy_.invokeMethodWithReturn("child_groups", Q_RETURN_ARG(QStringList, list));
66+
bool rc;
67+
// bool rc = const_cast<Settings*>(this)->proxy_.invokeMethodWithReturn("child_groups", Q_RETURN_ARG(QStringList, list));
6368
if (!rc) throw std::runtime_error("Settings::child_groups() invoke method failed");
6469
return list;
6570
}
6671

6772
QStringList Settings::childKeys() const
6873
{
6974
QStringList list;
70-
bool rc = const_cast<Settings*>(this)->proxy_.invokeMethodWithReturn("child_keys", Q_RETURN_ARG(QStringList, list));
75+
bool rc;
76+
// bool rc = const_cast<Settings*>(this)->proxy_.invokeMethodWithReturn("child_keys", Q_RETURN_ARG(QStringList, list));
7177
if (!rc) throw std::runtime_error("Settings::child_keys() invoke method failed");
7278
return list;
7379
}
7480

7581
bool Settings::contains(const QString& key) const
7682
{
7783
bool flag = false;
78-
bool rc = const_cast<Settings*>(this)->proxy_.invokeMethodWithReturn("contains", Q_RETURN_ARG(bool, flag), Q_ARG(QString, key));
84+
bool rc;
85+
// bool rc = const_cast<Settings*>(this)->proxy_.invokeMethodWithReturn("contains", Q_RETURN_ARG(bool, flag), Q_ARG(QString, key));
7986
if (!rc) throw std::runtime_error("Settings::contains() invoke method failed");
8087
return flag;
8188
}
8289

8390
void Settings::remove(const QString& key)
8491
{
85-
bool rc = proxy_.invokeMethod("remove", Q_ARG(QString, key));
92+
bool rc;
93+
// bool rc = proxy_.invokeMethod("remove", Q_ARG(QString, key));
8694
if (!rc) throw std::runtime_error("Settings::remove() invoke method failed");
8795
}
8896

8997
void Settings::setValue(const QString& key, const QVariant& value)
9098
{
91-
bool rc = proxy_.invokeMethod("set_value", Q_ARG(QString, key), Q_ARG(QVariant, value));
99+
bool rc;
100+
101+
// bool rc = proxy_.invokeMethod("set_value", Q_ARG(QString, key), Q_ARG(QVariant, value));
92102
if (!rc) throw std::runtime_error("Settings::set_value() invoke method failed");
93103
}
94104

95105
QVariant Settings::value(const QString& key, const QVariant& defaultValue) const
96106
{
97107
QVariant val;
98-
bool rc = const_cast<Settings*>(this)->proxy_.invokeMethodWithReturn("value", Q_RETURN_ARG(QVariant, val), Q_ARG(QString, key), Q_ARG(QVariant, defaultValue));
108+
bool rc;
109+
// bool rc = QMetaObject::invokeMethod(proxy_.proxiedObject(), "value", Qt::DirectConnection, Q_RETURN_ARG(QVariant, val), Q_ARG(QString, key), Q_ARG(QVariant, defaultValue));
110+
// bool rc = const_cast<Settings*>(this)->proxy_.invokeMethodWithReturn("value", Q_RETURN_ARG(QVariant, val), Q_ARG(QString, key), Q_ARG(QVariant, defaultValue));
99111
if (!rc) throw std::runtime_error("Settings::value() invoke method failed");
100112
return val;
101113
}

qt_gui_cpp/src/qt_gui_cpp_shiboken/CMakeLists.txt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
find_package(Qt5Widgets REQUIRED)
1+
find_package(QTWidgets NAMES Qt5Widgets Qt6Widgets)
2+
find_package(Qt${QTWidgets_VERSION_MAJOR}Widgets REQUIRED)
3+
24
set(qt_gui_cpp_shiboken_QT_COMPONENTS
35
QtCore
46
QtGui
@@ -50,18 +52,23 @@ if(shiboken_helper_FOUND)
5052
list(APPEND qt_gui_cpp_BINDINGS "shiboken")
5153
set(qt_gui_cpp_BINDINGS "${qt_gui_cpp_BINDINGS}" PARENT_SCOPE)
5254

53-
set(QT_INCLUDE_DIR "${Qt5Widgets_INCLUDE_DIRS}")
54-
shiboken_generator(libqt_gui_cpp global.h typesystem.xml ${PROJECT_SOURCE_DIR}/src/qt_gui_cpp_shiboken "${qt_gui_cpp_shiboken_SRCS}" "${qt_gui_cpp_HDRS}" "${qt_gui_cpp_INCLUDE_PATH}" "${CMAKE_CURRENT_BINARY_DIR}")
55+
set(QT_INCLUDE_DIR "${Qt${QT_VERSION_MAJOR}Widgets_INCLUDE_DIRS}")
56+
if(${QTWidgets_VERSION_MAJOR} GREATER "5")
57+
shiboken_generator6(libqt_gui_cpp global.h typesystem.xml ${PROJECT_SOURCE_DIR}/src/qt_gui_cpp_shiboken "${qt_gui_cpp_shiboken_SRCS}" "${qt_gui_cpp_HDRS}" "${qt_gui_cpp_INCLUDE_PATH}" "${CMAKE_CURRENT_BINARY_DIR}")
58+
else()
59+
shiboken_generator(libqt_gui_cpp global.h typesystem.xml ${PROJECT_SOURCE_DIR}/src/qt_gui_cpp_shiboken "${qt_gui_cpp_shiboken_SRCS}" "${qt_gui_cpp_HDRS}" "${qt_gui_cpp_INCLUDE_PATH}" "${CMAKE_CURRENT_BINARY_DIR}")
60+
endif()
5561

5662
shiboken_include_directories(qt_gui_cpp_shiboken "${qt_gui_cpp_shiboken_QT_COMPONENTS}")
5763

5864
add_library(qt_gui_cpp_shiboken SHARED ${qt_gui_cpp_shiboken_SRCS})
65+
set_property(TARGET qt_gui_cpp_shiboken PROPERTY PREFIX "")
66+
target_compile_definitions(qt_gui_cpp_shiboken PRIVATE BINDINGS_BUILD)
5967
target_include_directories(qt_gui_cpp_shiboken PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../include)
60-
target_link_libraries(qt_gui_cpp_shiboken ${PROJECT_NAME})
61-
ament_target_dependencies(qt_gui_cpp_shiboken pluginlib TinyXML2)
68+
target_link_libraries(qt_gui_cpp_shiboken ${PROJECT_NAME} pluginlib::pluginlib tinyxml2::tinyxml2)
6269
shiboken_target_link_libraries(qt_gui_cpp_shiboken "${qt_gui_cpp_shiboken_QT_COMPONENTS}")
6370

6471
install(TARGETS qt_gui_cpp_shiboken
6572
DESTINATION ${PYTHON_INSTALL_DIR}/${PROJECT_NAME})
66-
endif()
73+
endif()
6774
endif()

qt_gui_cpp/src/qt_gui_cpp_sip/plugin_provider.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public:
1313

1414
virtual ~PluginProvider();
1515

16-
virtual QMap<QString, QString> discover(QObject* discovery_data);
16+
virtual QMultiMap<QString, QString> discover(QObject* discovery_data);
1717

1818
/**
1919
* @attention Ownership of returned PluginDescriptor's is transfered to the caller

0 commit comments

Comments
 (0)