Converting Rqt Plugin to QWidget
Hi!
Although rqt_robot_dashboard
(class Dashboard
as you can see here; I am using the cob_dashboard
) itself is derived from Plugin
it still uses QWidgets
in its interface. The dashboard uses get_widgets()
to retrieve a nested list (top-level list contains the groups of entries in the toolbar while the second-level lists contain the actual entries) of QWidget
elements (from what I've seen so far it's usually recommended to use IconToolButton
, QLabel
or other simple widgets).
So far I have been creating my own widgets. In order for me to display something in the main view of the dashboard I am creating a toolbar entry, which - upon clicking - adds a QWidget
to that view. Relatively easy to accomplish. However now I would like to reuse some of the rqt_common_plugins
(rqt_graph
for example) and rqt_robot_plugins
(rqt_tf_tree
for example) in my dashboard. The problem that I'm facing is that these plugins are either derived from Plugin
or directly from QObject
hence not derived from QWidget
.
Is there a way to convert these things in normal QWidget
without extracting bits and pieces from their original source code? These plugins actually contain QWidget
(see below) however there are also various Plugin
/QObject
-related functions that I also have to figure out how to remap - too much work.
Here are two snippets from rqt_tf_tree
(see here for complete code) and rqt_graph
to give some overview:
tf_tree.py
class RosTfTree(QObject):
_deferred_fit_in_view = Signal()
def __init__(self, context):
super(RosTfTree, self).__init__(context)
self.initialized = False
self.setObjectName('RosTfTree')
self._current_dotcode = None
self._widget = QWidget() // <---------This can be extracted...maybe
# factory builds generic dotcode items
self.dotcode_factory = PydotFactory()
# self.dotcode_factory = PygraphvizFactory()
# generator builds rosgraph
self.dotcode_generator = RosTfTreeDotcodeGenerator()
self.tf2_buffer_ = tf2_ros.Buffer()
// ...
ros_graph.py
class RosGraph(Plugin):
_deferred_fit_in_view = Signal()
def __init__(self, context):
super(RosGraph, self).__init__(context)
self.initialized = False
self.setObjectName('RosGraph')
self._graph = None
self._current_dotcode = None
self._widget = QWidget() // <---------This can be extracted...maybe
# factory builds generic dotcode items
self.dotcode_factory = PydotFactory()
# self.dotcode_factory = PygraphvizFactory()
# generator builds rosgraph
self.dotcode_generator = RosGraphDotcodeGenerator()
// ...
As you can see each contains self._widget
which I might be able to use though I haven't finished analyzing the code to see what will break if I do that.
Has anyone done something like that? Any ideas how to do it in the most trivial and time-saving manner?