diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a3822e6e380d06a3f12e997d5c1023598385515e..25c72acc11ed237b4b04cfe55956b2a6e3354117 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -141,7 +141,7 @@ debian-build:
   image: $BUILD_IMAGE_REGISTRY/otb-debian-native:testing
   allow_failure: true
   script:
-    - xvfb-run -a -n 1 -s "-screen 0 1024x768x24 -dpi 96" ctest -V -S CI/main_ci.cmake -DIMAGE_NAME:string=debian-testing-gcc
+    - QT_QPA_PLATFORM=offscreen ctest -V -S CI/main_ci.cmake -DIMAGE_NAME:string=debian-testing-gcc
   after_script:
     - export CI_ALLOW_FAILURE=ON
     - python3 -u CI/cdash_handler.py
@@ -159,11 +159,12 @@ ubuntu-xdk-build-doc:
   extends: .common-build
   image: $BUILD_IMAGE_REGISTRY/otb-ubuntu-superbuild-base:18.04
   script:
-    - xvfb-run -a -n 1 -s "-screen 0 1024x768x24 -dpi 96" ctest -V -S CI/main_superbuild.cmake -DIMAGE_NAME:string=ubuntu-18.04-llvm-xdk
+    - export QT_QPA_PLATFORM=offscreen
+    - ctest -V -S CI/main_superbuild.cmake -DIMAGE_NAME:string=ubuntu-18.04-llvm-xdk
     - mv build/CookBook-*-html.tar.gz . || true
     - mv build/Documentation/Cookbook/latex/CookBook-*.pdf . || true
     - mv build/Documentation/Doxygen/OTB-Doxygen-*.tar.bz2 . || true
-    - xvfb-run -a -n 1 -s "-screen 0 1024x768x24 -dpi 96" ctest -V -S CI/main_packages.cmake -DIMAGE_NAME:string=ubuntu-18.04-llvm-xdk -DNAME_SUFFIX:string=-glibc-2.27
+    - ctest -V -S CI/main_packages.cmake -DIMAGE_NAME:string=ubuntu-18.04-llvm-xdk -DNAME_SUFFIX:string=-glibc-2.27
     - mv build_packages/OTB-*.run . || true
   needs:
     - job: ubuntu-xdk-prepare
@@ -180,8 +181,9 @@ centos-xdk-build:
   extends: .common-build
   image: $BUILD_IMAGE_REGISTRY/otb-centos-superbuild-base:6.6
   script:
-    - xvfb-run -a -n 1 -s "-screen 0 1024x768x24 -dpi 96" ctest -V -S CI/main_superbuild.cmake -DIMAGE_NAME:string=centos-6.6-gcc
-    - xvfb-run -a -n 1 -s "-screen 0 1024x768x24 -dpi 96" ctest -V -S CI/main_packages.cmake -DIMAGE_NAME:string=centos-6.6-gcc
+    - export QT_QPA_PLATFORM=offscreen
+    - ctest -V -S CI/main_superbuild.cmake -DIMAGE_NAME:string=centos-6.6-gcc
+    - ctest -V -S CI/main_packages.cmake -DIMAGE_NAME:string=centos-6.6-gcc
     - mv build_packages/OTB-*.run . || true
   needs:
     - job: centos-xdk-prepare
@@ -286,8 +288,7 @@ ubuntu-xdk-qa-code-coverage:
       - $SONAR_OTB_TOKEN
   image: $BUILD_IMAGE_REGISTRY/otb-ubuntu-superbuild-qa:18.04
   script:
-    - xvfb-run -a -n 1 -s "-screen 0 1024x768x24 -dpi 96"
-               ctest -V -S CI/main_qa.cmake
+    - QT_QPA_PLATFORM=offscreen ctest -V -S CI/main_qa.cmake
                      -DIMAGE_NAME:string=ubuntu-18.04-llvm-qa
                      -DQA:BOOL=ON
     - ./CI/otb_coverage.sh
diff --git a/Modules/Visualization/MonteverdiCore/include/mvdAlgorithm.h b/Modules/Visualization/MonteverdiCore/include/mvdAlgorithm.h
index 8b93c1857f71c818a393ae4e5d407abe2b6e460f..93fea6748740ccbe637a343ee56aa80b9f56b66c 100644
--- a/Modules/Visualization/MonteverdiCore/include/mvdAlgorithm.h
+++ b/Modules/Visualization/MonteverdiCore/include/mvdAlgorithm.h
@@ -494,11 +494,10 @@ inline QString ToQString<float>(const float& val)
 {
   assert(!std::isnan(val));
 
-  QString valf;
-
   // See IEEE-754
   // Ref. http://en.wikipedia.org/wiki/Single-precision_floating-point_format
-  valf.sprintf("%.9g", val);
+  
+  QString valf = QString("%1").arg(val, 0, 'g', 9);
 
 #if 0
   std::cout
@@ -522,11 +521,11 @@ inline QString ToQString<double>(const double& val)
 {
   assert(!std::isnan(val));
 
-  QString vald;
-
   // See IEEE-754
   // Ref. http://en.wikipedia.org/wiki/Double_precision
-  vald.sprintf("%.17g", val);
+
+  QString vald = QString("%1").arg(val, 0, 'g', 17);
+
 
 #if 0
   std::cout
diff --git a/SuperBuild/CMake/External_qt5.cmake b/SuperBuild/CMake/External_qt5.cmake
index 87db40d8be0ca6b479e6625cd1b9cfa0bbc264c4..65281c88b723e5c290752e56d53bde4e9443abff 100644
--- a/SuperBuild/CMake/External_qt5.cmake
+++ b/SuperBuild/CMake/External_qt5.cmake
@@ -130,8 +130,8 @@ configure_file( ${QT5_CONFIGURE_COMMAND_IN} ${QT5_CONFIGURE_COMMAND} @ONLY )
 
 ExternalProject_Add(QT5
   PREFIX QT5
-  URL "https://download.qt.io/archive/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz"
-  URL_MD5 7e167b9617e7bd64012daaacb85477af
+  URL "https://download.qt.io/archive/qt/5.14/5.14.1/single/qt-everywhere-src-5.14.1.tar.xz"
+  URL_MD5 781c3179410aff7ef84607214e1e91b4
   BINARY_DIR ${QT5_SB_BUILD_DIR}
   INSTALL_DIR ${SB_INSTALL_PREFIX}
   DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
diff --git a/SuperBuild/patches/QT5/qt5-1-jpeg-detection-win.diff b/SuperBuild/patches/QT5/qt5-1-jpeg-detection-win.diff
deleted file mode 100644
index df7bc1e769ac02d3e80c83a45844b7e294a817d5..0000000000000000000000000000000000000000
--- a/SuperBuild/patches/QT5/qt5-1-jpeg-detection-win.diff
+++ /dev/null
@@ -1,12 +0,0 @@
---- qt-everywhere-src-5.10.1/qtbase/src/gui/configure.json	2018-02-08 19:24:48.000000000 +0100
-+++ QT5/qtbase/src/gui/configure.json	2018-04-10 11:50:15.631526687 +0200
-@@ -278,8 +278,7 @@
-                 "main": "jpeg_create_compress(cinfo);"
-             },
-             "sources": [
--                { "libs": "-llibjpeg", "condition": "config.msvc" },
--                { "libs": "-ljpeg", "condition": "!config.msvc" }
-+                { "libs": "-ljpeg" }
-             ]
-         },
-         "libpng": {
diff --git a/SuperBuild/patches/QT5/qt5-2-undefVar-macx.diff b/SuperBuild/patches/QT5/qt5-2-undefVar-macx.diff
deleted file mode 100644
index 7fcdd42a699fa80a83b5fb8de33e0d5a5ddeace2..0000000000000000000000000000000000000000
--- a/SuperBuild/patches/QT5/qt5-2-undefVar-macx.diff
+++ /dev/null
@@ -1,70 +0,0 @@
---- qt-everywhere-src-5.10.1/qtbase/src/corelib/kernel/qcore_mac_p.h	2018-02-08 19:24:48.000000000 +0100
-+++ QT5/qtbase/src/corelib/kernel/qcore_mac_p.h	2018-04-11 15:26:28.118640978 +0200
-@@ -86,7 +86,7 @@
-     QAppleRefCounted(const QAppleRefCounted &other) : value(other.value) { if (value) RetainFunction(value); }
-     ~QAppleRefCounted() { if (value) ReleaseFunction(value); }
-     operator T() { return value; }
--    void swap(QAppleRefCounted &other) Q_DECL_NOEXCEPT_EXPR(noexcept(qSwap(value, other.value)))
-+    void swap(QAppleRefCounted &other) Q_DECL_NOEXCEPT_EXPR(noexcept(qSwap(this->value, other.value)))
-     { qSwap(value, other.value); }
-     QAppleRefCounted &operator=(const QAppleRefCounted &other)
-     { QAppleRefCounted copy(other); swap(copy); return *this; }
---- qt-everywhere-src-5.10.1/qtbase/src/corelib/kernel/qcore_foundation.mm	2018-02-08 19:24:48.000000000 +0100
-+++ QT5/qtbase/src/corelib/kernel/qcore_foundation.mm	2018-04-11 17:03:51.018596589 +0200
-@@ -488,7 +488,7 @@
- */
- NSTimeZone *QTimeZone::toNSTimeZone() const
- {
--    return [static_cast<NSTimeZone *>(toCFTimeZone()) autorelease];
-+    return [((NSTimeZone *) toCFTimeZone()) autorelease];
- }
- #endif
- 
---- qt-everywhere-src-5.10.1/qtbase/src/platformsupport/clipboard/qmacmime.mm	2018-02-08 19:24:48.000000000 +0100
-+++ QT5/qtbase/src/platformsupport/clipboard/qmacmime.mm	2018-04-11 17:13:54.799982725 +0200
-@@ -853,11 +853,11 @@
- 
-     QImage img = qvariant_cast<QImage>(variant);
-     NSDictionary *props = @{
--        static_cast<NSString *>(kCGImagePropertyPixelWidth) : [NSNumber numberWithInt:img.width()],
--        static_cast<NSString *>(kCGImagePropertyPixelHeight) : [NSNumber numberWithInt:img.height()]
-+        ((NSString *) kCGImagePropertyPixelWidth) : [NSNumber numberWithInt:img.width()],
-+        ((NSString *) kCGImagePropertyPixelHeight) : [NSNumber numberWithInt:img.height()]
-     };
- 
--    CGImageDestinationAddImage(imageDestination, qt_mac_toCGImage(img), static_cast<CFDictionaryRef>(props));
-+    CGImageDestinationAddImage(imageDestination, qt_mac_toCGImage(img), (CFDictionaryRef) props);
-     CGImageDestinationFinalize(imageDestination);
- 
-     return QList<QByteArray>() << QByteArray::fromCFData(data);
---- qt-everywhere-src-5.10.1/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm	2018-02-08 19:24:48.000000000 +0100
-+++ QT5/qtbase/src/plugins/platforms/cocoa/qcocoawindow.mm	2018-04-11 17:36:09.563188504 +0200
-@@ -1684,7 +1684,7 @@
- 
-     if (!m_drawContentBorderGradient) {
-         window.styleMask = window.styleMask & ~NSTexturedBackgroundWindowMask;
--        [window.contentView.superview setNeedsDisplay:YES];
-+        [[[window contentView] superview] setNeedsDisplay:YES];
-         window.titlebarAppearsTransparent = NO;
-         return;
-     }
---- qt-everywhere-src-5.10.1/qtbase/src/plugins/platforms/cocoa/qnswindow.mm	2018-02-08 19:24:48.000000000 +0100
-+++ QT5/qtbase/src/plugins/platforms/cocoa/qnswindow.mm	2018-04-11 18:27:43.952730012 +0200
-@@ -231,7 +231,7 @@
-     if (pw->frameStrutEventsEnabled() && isMouseEvent(theEvent)) {
-         NSPoint loc = [theEvent locationInWindow];
-         NSRect windowFrame = [self convertRectFromScreen:self.frame];
--        NSRect contentFrame = self.contentView.frame;
-+        NSRect contentFrame = [[self contentView] frame];
-         if (NSMouseInRect(loc, windowFrame, NO) && !NSMouseInRect(loc, contentFrame, NO))
-             [qnsview_cast(pw->view()) handleFrameStrutMouseEvent:theEvent];
-     }
-@@ -260,7 +260,7 @@
- + (void)applicationActivationChanged:(NSNotification*)notification
- {
-     const id sender = self;
--    NSEnumerator<NSWindow*> *windowEnumerator = nullptr;
-+    NSEnumerator *windowEnumerator = nullptr;
-     NSApplication *application = [NSApplication sharedApplication];
- 
- #if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_12)
diff --git a/SuperBuild/patches/QT5/qt5-3-png-freetype-detection-all.diff b/SuperBuild/patches/QT5/qt5-3-png-freetype-detection-all.diff
deleted file mode 100644
index 1a46b0acd8f10380f052d6c197c51f8ea95f45d4..0000000000000000000000000000000000000000
--- a/SuperBuild/patches/QT5/qt5-3-png-freetype-detection-all.diff
+++ /dev/null
@@ -1,25 +0,0 @@
---- qt-everywhere-src-5.10.1/qtbase/src/gui/configure.json	2018-02-08 19:24:48.000000000 +0100
-+++ QT5/src/QT5/qtbase/src/gui/configure.json	2018-04-10 14:34:05.529668610 +0200
-@@ -158,8 +158,8 @@
-                 ]
-             },
-             "sources": [
--                { "type": "pkgConfig", "args": "freetype2" },
--                { "type": "freetype", "libs": "-lfreetype" }
-+                { "type": "freetype", "libs": "-lfreetype" },
-+                { "type": "pkgConfig", "args": "freetype2" }
-             ]
-         },
-         "fontconfig": {
-@@ -289,9 +289,9 @@
-                 "main": "(void) png_create_read_struct(PNG_LIBPNG_VER_STRING,0,0,0);"
-             },
-             "sources": [
--                { "type": "pkgConfig", "args": "libpng" },
-+                { "libs": "-lpng", "condition": "!config.msvc" },
-                 { "libs": "-llibpng", "condition": "config.msvc" },
--                { "libs": "-lpng", "condition": "!config.msvc" }
-+                { "type": "pkgConfig", "args": "libpng" }
-             ],
-             "use": [
-                 { "lib": "zlib", "condition": "features.system-zlib" }