Przeglądaj źródła

Control Qt::ConnectionType in connections between VTK and Qt

Sometimes it is useful to connect with a different type than
Qt::AutoConnection.
Julien Finet 13 lat temu
rodzic
commit
3e736fdf1b

+ 6 - 3
Libs/Visualization/VTK/Core/ctkVTKConnection.cpp

@@ -56,6 +56,7 @@ ctkVTKConnectionPrivate::ctkVTKConnectionPrivate(ctkVTKConnection& object)
   this->QtObject    = 0;
   this->VTKEvent    = vtkCommand::NoEvent;
   this->Priority    = 0.0;
+  this->ConnectionType = Qt::AutoConnection;
   this->SlotType    = ARG_UNKNOWN;
   this->Connected   = false;
   this->Blocked     = false;
@@ -84,11 +85,11 @@ void ctkVTKConnectionPrivate::connect()
     {
     case ctkVTKConnectionPrivate::ARG_VTKOBJECT_AND_VTKOBJECT:
       QObject::connect(q, SIGNAL(emitExecute(vtkObject*, vtkObject*)),
-        this->QtObject, this->QtSlot.toLatin1(), Qt::AutoConnection);
+        this->QtObject, this->QtSlot.toLatin1(), this->ConnectionType);
       break;
     case ctkVTKConnectionPrivate::ARG_VTKOBJECT_VOID_ULONG_VOID:
       QObject::connect(q, SIGNAL(emitExecute(vtkObject*, void*, unsigned long, void*)),
-                       this->QtObject, this->QtSlot.toLatin1(), Qt::AutoConnection);
+                       this->QtObject, this->QtSlot.toLatin1(), this->ConnectionType);
       break;
     default:
       Q_ASSERT(false);
@@ -259,7 +260,8 @@ bool ctkVTKConnection::isValid(vtkObject* vtk_obj, unsigned long vtk_event,
 //-----------------------------------------------------------------------------
 void ctkVTKConnection::setup(vtkObject* vtk_obj, unsigned long vtk_event,
                              const QObject* qt_obj, QString qt_slot, 
-                             float priority)
+                             float priority,
+                             Qt::ConnectionType connectionType)
 {
   Q_D(ctkVTKConnection);
   
@@ -273,6 +275,7 @@ void ctkVTKConnection::setup(vtkObject* vtk_obj, unsigned long vtk_event,
   d->VTKEvent = vtk_event;
   d->QtSlot = qt_slot;
   d->Priority = priority;
+  d->ConnectionType = connectionType;
 
   if (qt_slot.contains(QRegExp(QString("\\( ?vtkObject ?\\* ?, ?vtkObject ?\\* ?\\)"))))
     {

+ 2 - 1
Libs/Visualization/VTK/Core/ctkVTKConnection.h

@@ -62,7 +62,8 @@ public:
   /// Of course the slot can contain less parameters, but always the same order
   /// though.
   void setup(vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, QString qt_slot, float priority = 0.f);
+    const QObject* qt_obj, QString qt_slot, float priority = 0.f,
+    Qt::ConnectionType connectionType = Qt::AutoConnection);
 
   /// 
   /// Check the validity of the parameters. Parameters must be valid to add 

+ 1 - 0
Libs/Visualization/VTK/Core/ctkVTKConnection_p.h

@@ -69,6 +69,7 @@ public:
   unsigned long                       VTKEvent;
   QString                             QtSlot;
   float                               Priority;
+  Qt::ConnectionType                  ConnectionType;
   int                                 SlotType;
   bool                                Connected;
   bool                                Blocked;

+ 9 - 6
Libs/Visualization/VTK/Core/ctkVTKObject.h

@@ -28,30 +28,33 @@
 #define QVTK_OBJECT_ADD_CONNECTION_METHOD                               \
 QString qvtkConnect(vtkObject* vtk_obj, unsigned long vtk_event,        \
                     const QObject* qt_obj, const char* qt_slot,         \
-                    float priority = 0.0)                               \
+                    float priority = 0.0,                               \
+                    Qt::ConnectionType connectionType = Qt::AutoConnection)\
 {                                                                       \
   return MyQVTK.addConnection(vtk_obj, vtk_event,                       \
-                              qt_obj, qt_slot, priority);               \
+                              qt_obj, qt_slot, priority, connectionType);\
 }
 
 //-----------------------------------------------------------------------------
 #define QVTK_OBJECT_RECONNECT_METHOD                                    \
 QString qvtkReconnect(vtkObject* old_vtk_obj, vtkObject* vtk_obj,       \
                       unsigned long vtk_event, const QObject* qt_obj,   \
-                      const char* qt_slot, float priority = 0.0)        \
+                      const char* qt_slot, float priority = 0.0,        \
+                      Qt::ConnectionType connectionType = Qt::AutoConnection)\
 {                                                                       \
   return MyQVTK.addConnection(old_vtk_obj, vtk_obj, vtk_event,          \
-                              qt_obj, qt_slot, priority);               \
+                              qt_obj, qt_slot, priority, connectionType);\
 }
 
 //-----------------------------------------------------------------------------
 #define QVTK_OBJECT_RECONNECT_METHOD_2                                  \
 QString qvtkReconnect(vtkObject* vtk_obj,                               \
                       unsigned long vtk_event, const QObject* qt_obj,   \
-                      const char* qt_slot, float priority = 0.0)        \
+                      const char* qt_slot, float priority = 0.0,        \
+                      Qt::ConnectionType connectionType = Qt::AutoConnection)\
 {                                                                       \
   return MyQVTK.reconnection(vtk_obj, vtk_event,                        \
-                             qt_obj, qt_slot, priority);                \
+                             qt_obj, qt_slot, priority, connectionType);\
 }
 
 //-----------------------------------------------------------------------------

+ 9 - 6
Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.cpp

@@ -198,7 +198,8 @@ void ctkVTKObjectEventsObserver::setStrictTypeCheck(bool check)
 
 //-----------------------------------------------------------------------------
 QString ctkVTKObjectEventsObserver::addConnection(vtkObject* old_vtk_obj, vtkObject* vtk_obj,
-  unsigned long vtk_event, const QObject* qt_obj, const char* qt_slot, float priority)
+  unsigned long vtk_event, const QObject* qt_obj, const char* qt_slot, float priority,
+  Qt::ConnectionType connectionType)
 {
   Q_D(ctkVTKObjectEventsObserver);
   if (old_vtk_obj)
@@ -235,21 +236,23 @@ QString ctkVTKObjectEventsObserver::addConnection(vtkObject* old_vtk_obj, vtkObj
     // Disconnect old vtkObject
     this->removeConnection(old_vtk_obj, vtk_event, qt_obj, qt_slot);
     }
-  return this->addConnection(vtk_obj, vtk_event, qt_obj, qt_slot, priority);
+  return this->addConnection(
+    vtk_obj, vtk_event, qt_obj, qt_slot, priority, connectionType);
 }
 
 //-----------------------------------------------------------------------------
 QString ctkVTKObjectEventsObserver::reconnection(vtkObject* vtk_obj,
   unsigned long vtk_event, const QObject* qt_obj,
-  const char* qt_slot, float priority)
+  const char* qt_slot, float priority, Qt::ConnectionType connectionType)
 {
   this->removeConnection(0, vtk_event, qt_obj, qt_slot);
-  return this->addConnection(vtk_obj, vtk_event, qt_obj, qt_slot, priority);
+  return this->addConnection(
+    vtk_obj, vtk_event, qt_obj, qt_slot, priority, connectionType);
 }
 
 //-----------------------------------------------------------------------------
 QString ctkVTKObjectEventsObserver::addConnection(vtkObject* vtk_obj, unsigned long vtk_event,
-  const QObject* qt_obj, const char* qt_slot, float priority)
+  const QObject* qt_obj, const char* qt_slot, float priority, Qt::ConnectionType connectionType)
 {
   Q_D(ctkVTKObjectEventsObserver);
   // If no vtk_obj is provided, there is no way we can create a connection.
@@ -281,7 +284,7 @@ QString ctkVTKObjectEventsObserver::addConnection(vtkObject* vtk_obj, unsigned l
   ctkVTKConnection * connection =
     ctkVTKObjectEventsObserver::connectionFactory->createConnection(this);//new ctkVTKConnection(this);
   connection->observeDeletion(d->ObserveDeletion);
-  connection->setup(vtk_obj, vtk_event, qt_obj, qt_slot, priority);
+  connection->setup(vtk_obj, vtk_event, qt_obj, qt_slot, priority, connectionType);
 
   // If required, establish connection
   connection->setBlocked(d->AllBlocked);

+ 6 - 3
Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.h

@@ -74,7 +74,8 @@ public:
   /// Of course the slot can contain less parameters, but always the same order
   /// though.
   QString addConnection(vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, const char* qt_slot, float priority = 0.0);
+    const QObject* qt_obj, const char* qt_slot, float priority = 0.0,
+    Qt::ConnectionType connectionType = Qt::AutoConnection);
 
   ///
   /// Utility function that remove a connection on old_vtk_obj and add a connection
@@ -86,7 +87,8 @@ public:
   /// Of course the slot can contain less parameters, but always the same order
   /// though.
   QString addConnection(vtkObject* old_vtk_obj, vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, const char* qt_slot, float priority = 0.0);
+    const QObject* qt_obj, const char* qt_slot, float priority = 0.0,
+    Qt::ConnectionType connectionType = Qt::AutoConnection);
 
   ///
   /// Utility function that remove a connection on old_vtk_obj and add a connection
@@ -99,7 +101,8 @@ public:
   /// though.
   QString reconnection(vtkObject* vtk_obj, unsigned long vtk_event,
                        const QObject* qt_obj, const char* qt_slot,
-                       float priority = 0.0);
+                       float priority = 0.0,
+                       Qt::ConnectionType connectionType = Qt::AutoConnection);
 
   ///
   /// Remove all the connections matching vtkobj, event, qtobj and slot using