Difference between revisions of "Documentation/Nightly/Developers/Tutorials/MigrationGuide/ITK4-to-ITK5"

From Slicer Wiki
Jump to: navigation, search
Line 37: Line 37:
 
Remove any branch checking of QT_VERSION lesser than 5.6.0
 
Remove any branch checking of QT_VERSION lesser than 5.6.0
 
<pre>
 
<pre>
 +
  #include <QtGlobal>
 
   #if(QT_VERSION < QT_VERSION_CHECKS(5, 6, 0))
 
   #if(QT_VERSION < QT_VERSION_CHECKS(5, 6, 0))
 
   // Obsolete Qt4 code
 
   // Obsolete Qt4 code
Line 44: Line 45:
 
   #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 
   #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 
   #endif
 
   #endif
 +
 +
  [...]
  
 
   class Q_SLICER_MODULE_SEGMENTATIONS_WIDGETS_PLUGINS_EXPORT qSlicerSegmentationsModuleWidgetsAbstractPlugin
 
   class Q_SLICER_MODULE_SEGMENTATIONS_WIDGETS_PLUGINS_EXPORT qSlicerSegmentationsModuleWidgetsAbstractPlugin
Line 57: Line 60:
 
After cleaning:
 
After cleaning:
  
 +
<pre>
 
   #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 
   #include <QtUiPlugin/QDesignerCustomWidgetInterface>
 +
 +
  [...]
 +
 
   class Q_SLICER_MODULE_SEGMENTATIONS_WIDGETS_PLUGINS_EXPORT qSlicerSegmentationsModuleWidgetsAbstractPlugin
 
   class Q_SLICER_MODULE_SEGMENTATIONS_WIDGETS_PLUGINS_EXPORT qSlicerSegmentationsModuleWidgetsAbstractPlugin
 
       : public QDesignerCustomWidgetInterface
 
       : public QDesignerCustomWidgetInterface
Line 64: Line 71:
 
     Q_INTERFACES(QDesignerCustomWidgetInterface);
 
     Q_INTERFACES(QDesignerCustomWidgetInterface);
 
   }
 
   }
 +
</pre>
  
 
====Python====
 
====Python====

Revision as of 20:05, 8 March 2019

Home < Documentation < Nightly < Developers < Tutorials < MigrationGuide < ITK4-to-ITK5

Transition from ITK4 to ITK5

This section lists categories of code changes necessary to build Slicer with ITK 5. Each category has a short description, an example error message, a suggested upgrade path, and references to relevant commits.

Referencing this list might be helpful if Slicer extensions require updates to be compatible with ITK 5.

Also check the ITK migration guide if more info is needed:

* https://github.com/InsightSoftwareConsortium/ITK/blob/master/Documentation/ITK5MigrationGuide.md (ITKv5 Migration Guide)

itkMultiThreader refactor

Replace lines like:

 #include <itkMultiThreader.h>
 itk::MultiThreader::Pointer ProcessingThreader;

with:

 #include <itkPlatformMultiThreader.h>
 itk::PlatformMultiThreader::Pointer ProcessingThreader;

SimpleFastMutexLock, FastMutexLock and MutexLock are deprecated

Instead use std::mutex available in C++11

Replace:

 #include "itkSimpleFastMutexLock.h"
 #include "itkFastMutexLock.h"
 #include "itkMutexLock.h"
 SimpleFastMutexLock
 FastMutexLock
 MutexLock

with:

 #include <mutex>
 std::mutex

Dead code after update to Qt >= 5.6.0

Remove any branch checking of QT_VERSION lesser than 5.6.0

  #include <QtGlobal>
  #if(QT_VERSION < QT_VERSION_CHECKS(5, 6, 0))
  // Obsolete Qt4 code
  #include <QDesignerCustomWidgetInterface>
  #else
  // Qt5 code
  #include <QtUiPlugin/QDesignerCustomWidgetInterface>
  #endif

  [...]

  class Q_SLICER_MODULE_SEGMENTATIONS_WIDGETS_PLUGINS_EXPORT qSlicerSegmentationsModuleWidgetsAbstractPlugin
      : public QDesignerCustomWidgetInterface
  {
  #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")
  #endif
    Q_INTERFACES(QDesignerCustomWidgetInterface);
  }

After cleaning:

  #include <QtUiPlugin/QDesignerCustomWidgetInterface>

  [...]

  class Q_SLICER_MODULE_SEGMENTATIONS_WIDGETS_PLUGINS_EXPORT qSlicerSegmentationsModuleWidgetsAbstractPlugin
      : public QDesignerCustomWidgetInterface
  {
    Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")
    Q_INTERFACES(QDesignerCustomWidgetInterface);
  }

Python

This migration guide points becomes obsolete: https://www.slicer.org/wiki/Documentation/Nightly/Developers/Tutorials/MigrationGuide#Qt5:_Fix_error:_.E2.80.98class_QHeaderView.E2.80.99_has_no_member_named_.E2.80.98setResizeMode.E2.80.99

Only Qt5 needs to be supported, so the following code can be simplified:

Before:

 _setSectionResizeMode(self.horizontalHeader(), 0, qt.QHeaderView.Stretch)
 def _setSectionResizeMode(header, *args, **kwargs):
   if version.parse(qt.Qt.qVersion()) < version.parse("5.0.0"):
     header.setResizeMode(*args, **kwargs)
   else:
     header.setSectionResizeMode(*args, **kwargs)

After:

 self.horizontalHeader(0, qt.QHeaderView.Stretch)