Documentation/Labs/Qt5-and-VTK8

From Slicer Wiki
Revision as of 16:48, 1 February 2017 by JChris.FillionR (talk | contribs)
Jump to: navigation, search
Home < Documentation < Labs < Qt5-and-VTK8

This page documents the update of Slicer to use Qt 5.

Overview

Because Qt4 is not actively developed (as documented here support ended), we need to work toward supporting Qt5. This page summarizes support status of the various components of Slicer stack and remaining tasks.

Status

  • Current main integration branch for testing:

https://github.com/jcfr/Slicer/commits/support-qt5


A first running example described in this commit
  • Superbuild configure command on mac using Qt 5.7 stock downloads
cmake \
  -DQT_QMAKE_EXECUTABLE:FILEPATH=/Users/pieper/Qt/5.7/clang_64/bin/qmake \
  -DCMAKE_PREFIX_PATH:PATH=/Users/pieper/Qt/5.7/clang_64/ \
  -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.9 \
  -DSlicer_USE_PYTHONQT_WITH_TCL:BOOL=OFF \
  -DSlicer_USE_SimpleITK:BOOL=OFF \
  -DSlicer_USE_QtTesting:BOOL=OFF \
  -DSlicer_BUILD_EXTENSIONMANAGER_SUPPORT:BOOL=OFF \
  -DSlicer_QT_VERSION:STRING=5 \
  ../Slicer

Platform Notes

Experimental build on Window:

  • Visual Studio Community 2015
  • Qt 5.7
    • Include QtWebEngine and QtScript during install
    • Select 2015 64 bit install

To Do List

All platforms

  • Slicer build system upgrade: To be done UnderConstruction.png
    • Add Slicer_QT_VERSION option that could be set to either 4 or 5 - See what is done in CTK
    • Fix qRestAPI to support Qt5 (or turn off Slicer_BUILD_EXTENSIONMANAGER_SUPPORT for testing)
    • Update use of QT4_* macros (see below) - See what is done in CTK
      • The QT5_ versions of the macros appear to be directly compatible
    • Port from QtWebKit to QtWebEngine
    • update PythonQt to the latest Qt version (may require updating to support QWebEngine)
    • Fix differences in plugin loading
    • Update packaging scripts (SlicerBlockInstallQt.cmake, SlicerCPackBundleFixup.cmake)
    • Update build script to support qt5 (see https://github.com/jcfr/qt-easy-build )
    • Update Slicer build instruction on developer wiki
  • Command line arguments to expose webgl and webengine debugging

./Slicer-build/Slicer --enable-experimental-web-platform-features --enable-unsafe-es3-apis --remote-debugging-port=12117 --use-gl=desktop

Mac

    • on Mac, QT_NO_OPENSSL is defined, but so is QSslError leading to redefined symbol [1](here).
    • Mac crash in qSlicerUnitsSettingsPanelPrivate::addQuantity, appears to be corrupted model.
    • Add libqcocoa.dylib and libqsqlite.dylib to package for mac
  mkdir Slicer-build/bin/Slicer.app/Contents/MacOS/sqldrivers
  cp ~/Qt/5.7/clang_64/plugins/sqldrivers/libqsqlite.dylib Slicer-build/bin/Slicer.app/Contents/MacOS/sqldrivers/
  mkdir Slicer-build/bin/Slicer.app/Contents/MacOS/platforms
  cp ~/Qt/5.7/clang_64/plugins/platforms/libqcocoa.dylib Slicer-build/bin/Slicer.app/Contents/MacOS/platforms/
  • Workarounds here:

https://gist.github.com/pieper/59de820ad08cf3c0f7a33926397e612d

Windows

  • qtstyleplugins library needs to be removed or ported to support windows
    • add declspec exports/imports
    • create .lib for use in QTGUI
    • support shared/static build?
  • AppLauncher settings need to be update
    • Add to PYTHONPATH: <superbuild>/VTKv7-build/bin/Debug (currently lib not bin)
    • Add to PATH: <Qt>/5.7/msvc2013_64/bin
  • Debug build is very slow - can it be improved?

SuperBuild Dependencies


  • CTK support: Done Check.svg


  • VTK
    • Support for QVTKWidget/QVTKWidget2: Done Check.svg
    • QML support for VTK render windows: To Be Done UnderConstruction.png
      • Not yet required by Slicer core
      • Jc@Kitware: We experimented with few approaches internally.


  • ITKv4: NA Check.svg


  • Usage of QT4_ macros:
$ ack --cmake -i "qt4"
CMake/SlicerMacroBuildModuleQtLibrary.cmake
116:  QT4_WRAP_CPP(MODULEQTLIBRARY_MOC_OUTPUT ${MODULEQTLIBRARY_MOC_SRCS})
118:  QT4_WRAP_UI(MODULEQTLIBRARY_UI_CXX ${MODULEQTLIBRARY_UI_SRCS})
121:    QT4_ADD_RESOURCES(MODULEQTLIBRARY_QRC_SRCS ${MODULEQTLIBRARY_RESOURCES})
127:  QT4_ADD_RESOURCES(MODULEQTLIBRARY_QRC_SRCS ${Slicer_LOGOS_RESOURCE})

CMake/SlicerMacroTranslation.cmake
83:    QT4_CREATE_TRANSLATION(QM_OUTPUT_FILES ${FILES_TO_TRANSLATE} ${TS_FILES})
85:    QT4_ADD_TRANSLATION(QM_OUTPUT_FILES ${TS_FILES})

CMake/SlicerMacroBuildQtModule.cmake
132:  QT4_WRAP_CPP(LOADABLEMODULE_MOC_OUTPUT ${LOADABLEMODULE_MOC_SRCS})
134:  QT4_WRAP_UI(LOADABLEMODULE_UI_CXX ${LOADABLEMODULE_UI_SRCS})
137:    QT4_ADD_RESOURCES(LOADABLEMODULE_QRC_SRCS ${LOADABLEMODULE_RESOURCES})
143:  QT4_ADD_RESOURCES(LOADABLEMODULE_QRC_SRCS ${Slicer_LOGOS_RESOURCE})

CMake/SlicerMacroBuildApplication.cmake
141:  QT4_WRAP_CPP(SLICERAPPLIB_MOC_OUTPUT ${SLICERAPPLIB_MOC_SRCS})
142:  QT4_WRAP_UI(SLICERAPPLIB_UI_CXX ${SLICERAPPLIB_UI_SRCS})
144:    QT4_ADD_RESOURCES(SLICERAPPLIB_QRC_SRCS ${SLICERAPPLIB_RESOURCES})

CMake/SlicerBlockFindQtAndCheckVersion.cmake
22:# The CMake code used to find Qt4 has been factored out into this CMake script so that
27:  find_package(Qt4)
28:  if(NOT QT4_FOUND)

CMake/SlicerMacroBuildBaseQtLibrary.cmake
35:#                           using QT4_WRAP_CPP CMake macro
38:#                           QT4_WRAP_UI CMake macro
47:#                           using QT4_ADD_RESOURCES
141:  QT4_WRAP_CPP(SLICERQTBASELIB_MOC_OUTPUT ${SLICERQTBASELIB_MOC_SRCS})
142:  QT4_WRAP_UI(SLICERQTBASELIB_UI_CXX ${SLICERQTBASELIB_UI_SRCS})
144:    QT4_ADD_RESOURCES(SLICERQTBASELIB_QRC_SRCS ${SLICERQTBASELIB_RESOURCES})
147:  QT4_ADD_RESOURCES(SLICERQTBASELIB_QRC_SRCS ${Slicer_SOURCE_DIR}/Resources/qSlicer.qrc)

Modules/Loadable/Models/Testing/Cxx/CMakeLists.txt
15:QT4_GENERATE_MOCS(

Modules/Loadable/Transforms/Testing/Cxx/CMakeLists.txt
9:QT4_GENERATE_MOCS(

Modules/Loadable/VolumeRendering/Testing/Cxx/CMakeLists.txt
36:QT4_GENERATE_MOCS(

Libs/MRML/Widgets/CMakeLists.txt
363:QT4_WRAP_CPP(MRMLWidgets_MOC_CXX ${MRMLWidgets_MOC_SRCS})
364:QT4_WRAP_UI(MRMLWidgets_UI_CXX ${MRMLWidgets_UI_SRCS})
365:QT4_ADD_RESOURCES(MRMLWidgets_QRC_CXX ${MRMLWidgets_QRC_SRCS})

Libs/MRML/Widgets/Testing/CMakeLists.txt
139:QT4_WRAP_CPP(Tests_MOC_CXX ${Tests_MOC_SRCS})
140:QT4_GENERATE_MOCS(

CMakeLists.txt
570:# Module name should be specified as they appear in FindQt4.cmake

Base/QTCore/Testing/Cxx/CMakeLists.txt
37:  QT4_GENERATE_MOCS(
42:    QT4_GENERATE_MOCS(
49:    QT4_GENERATE_MOCS(
54:  QT4_ADD_RESOURCES(Tests Resources/${KIT}Testing.qrc)
60:    list(APPEND KIT_TEST_TARGET_LIBRARIES Qt4::QtTest)

Base/QTGUI/Testing/Cxx/CMakeLists.txt
45:    QT4_GENERATE_MOCS(${KIT_TEST_MOC_SRCS})
48:  QT4_ADD_RESOURCES(Tests Resources/${KIT}Testing.qrc)

Migration Guide

To do items (partial list):

  • update loadable modules to use new plugin macros
  • any use of QWebKit needs to switch to QWebEngine

List of extensions that may require updates

TBD (probably all extensions need work)

Future works

NA

References