Hello community,

here is the log from the commit of package gnuradio for openSUSE:Factory 
checked in at 2019-05-03 22:46:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnuradio (Old)
 and      /work/SRC/openSUSE:Factory/.gnuradio.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnuradio"

Fri May  3 22:46:47 2019 rev:33 rq:700136 version:3.7.13.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/gnuradio/gnuradio.changes        2019-04-23 
14:36:33.533493009 +0200
+++ /work/SRC/openSUSE:Factory/.gnuradio.new.5148/gnuradio.changes      
2019-05-03 22:46:47.303819053 +0200
@@ -1,0 +2,32 @@
+Mon Apr 29 11:35:24 UTC 2019 - Christophe Giboudeaux <[email protected]>
+
+- Add some missing optional dependencies: libgsm and codec2.
+
+-------------------------------------------------------------------
+Mon Apr 29 10:37:15 UTC 2019 - Christophe Giboudeaux <[email protected]>
+
+- Add upstream patches to build gnuradio using Qt5 on openSUSE > 1500:
+  - qt5-maint-0001-CMake-Update-required-minimum-version-to-2.8.12.patch
+  - qt5-maint-0002-CMake-FindQwt-Find-the-Qt5-version-of-QWT-instead-of.patch
+  - qt5-maint-0003-gr-qtgui-update-for-Qt5.patch
+  - qt5-maint-0004-grc-Generate-Python-scripts-that-use-PyQt5.patch
+  - qt5-maint-0005-gr-qtgui-Add-a-workaround-for-an-upstream-bug-of-uic.patch
+  - qt5-maint-0006-qtgui-fixed-examples-for-Qt5-compatibility.patch
+  - qt5-maint-0007-qtgui-Fixes-for-edit_box_msg-to-work-with-QT5.patch
+  - qt5-maint-0008-gr-qtgui-Allow-build-with-Qt4-or-Qt5-default.patch
+  - qt5-maint-0009-gr-qtgui-Fix-PyQt-4-5-include-in-XMLs-for-GRC.patch
+  - qt5-maint-0010-gr-qtgui-Fix-range.py-to-work-with-both-Qt4-and-Qt5.patch
+  - qt5-maint-0011-gr-qtgui-Re-introduce-some-Qt4-specific-code.patch
+  - qt5-maint-0012-grc-Fix-generation-of-Python-code-for-Qt4-and-Qt5.patch
+  - qt5-maint-0013-grc-replace-templated-xml-files-with-search-and-repl.patch
+  - qt5-maint-0014-qtgui-replace-templated-xml-files-with-search-and-re.patch
+  - qt5-maint-0017-qtgui-fix-stylesheet-for-qt5.patch
+  - qt5-maint-0019-qtgui-fixed-apps-for-Qt5-compatibility.patch
+  - qt5-maint-0021-gnuradio-runtime-ctrlport-qt5.patch
+  - qt5-maint-0022-gr-uhd-qt5.patch
+  - qt5-maint-0023-gr-qtgui-util.patch
+  - qt5-maint-0024-gr-qtgui-restoreGeometry.patch
+- Add 0001-Add-the-include-path-used-by-the-openSUSE-package.patch
+  for the Qt5 build.
+
+-------------------------------------------------------------------

New:
----
  0001-Add-the-include-path-used-by-the-openSUSE-package.patch
  qt5-maint-0001-CMake-Update-required-minimum-version-to-2.8.12.patch
  qt5-maint-0002-CMake-FindQwt-Find-the-Qt5-version-of-QWT-instead-of.patch
  qt5-maint-0003-gr-qtgui-update-for-Qt5.patch
  qt5-maint-0004-grc-Generate-Python-scripts-that-use-PyQt5.patch
  qt5-maint-0005-gr-qtgui-Add-a-workaround-for-an-upstream-bug-of-uic.patch
  qt5-maint-0006-qtgui-fixed-examples-for-Qt5-compatibility.patch
  qt5-maint-0007-qtgui-Fixes-for-edit_box_msg-to-work-with-QT5.patch
  qt5-maint-0008-gr-qtgui-Allow-build-with-Qt4-or-Qt5-default.patch
  qt5-maint-0009-gr-qtgui-Fix-PyQt-4-5-include-in-XMLs-for-GRC.patch
  qt5-maint-0010-gr-qtgui-Fix-range.py-to-work-with-both-Qt4-and-Qt5.patch
  qt5-maint-0011-gr-qtgui-Re-introduce-some-Qt4-specific-code.patch
  qt5-maint-0012-grc-Fix-generation-of-Python-code-for-Qt4-and-Qt5.patch
  qt5-maint-0013-grc-replace-templated-xml-files-with-search-and-repl.patch
  qt5-maint-0014-qtgui-replace-templated-xml-files-with-search-and-re.patch
  qt5-maint-0017-qtgui-fix-stylesheet-for-qt5.patch
  qt5-maint-0019-qtgui-fixed-apps-for-Qt5-compatibility.patch
  qt5-maint-0021-gnuradio-runtime-ctrlport-qt5.patch
  qt5-maint-0022-gr-uhd-qt5.patch
  qt5-maint-0023-gr-qtgui-util.patch
  qt5-maint-0024-gr-qtgui-restoreGeometry.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gnuradio.spec ++++++
--- /var/tmp/diff_new_pack.FFn0nA/_old  2019-05-03 22:46:48.679822212 +0200
+++ /var/tmp/diff_new_pack.FFn0nA/_new  2019-05-03 22:46:48.683822221 +0200
@@ -33,7 +33,30 @@
 # http://www.nathanwest.us/grc_to_37.sh
 Source4:        grc_to_37.sh
 Source99:       %{name}-rpmlintrc
-Patch2:         missing_library.patch
+Patch0:         missing_library.patch
+# PATCH 100-120 Qt5 port patches
+Patch100:       
qt5-maint-0001-CMake-Update-required-minimum-version-to-2.8.12.patch
+Patch101:       
qt5-maint-0002-CMake-FindQwt-Find-the-Qt5-version-of-QWT-instead-of.patch
+Patch102:       qt5-maint-0003-gr-qtgui-update-for-Qt5.patch
+Patch103:       qt5-maint-0004-grc-Generate-Python-scripts-that-use-PyQt5.patch
+Patch104:       
qt5-maint-0005-gr-qtgui-Add-a-workaround-for-an-upstream-bug-of-uic.patch
+Patch105:       qt5-maint-0006-qtgui-fixed-examples-for-Qt5-compatibility.patch
+Patch106:       
qt5-maint-0007-qtgui-Fixes-for-edit_box_msg-to-work-with-QT5.patch
+Patch107:       
qt5-maint-0008-gr-qtgui-Allow-build-with-Qt4-or-Qt5-default.patch
+Patch108:       
qt5-maint-0009-gr-qtgui-Fix-PyQt-4-5-include-in-XMLs-for-GRC.patch
+Patch109:       
qt5-maint-0010-gr-qtgui-Fix-range.py-to-work-with-both-Qt4-and-Qt5.patch
+Patch110:       
qt5-maint-0011-gr-qtgui-Re-introduce-some-Qt4-specific-code.patch
+Patch111:       
qt5-maint-0012-grc-Fix-generation-of-Python-code-for-Qt4-and-Qt5.patch
+Patch112:       
qt5-maint-0013-grc-replace-templated-xml-files-with-search-and-repl.patch
+Patch113:       
qt5-maint-0014-qtgui-replace-templated-xml-files-with-search-and-re.patch
+Patch114:       qt5-maint-0017-qtgui-fix-stylesheet-for-qt5.patch
+Patch115:       qt5-maint-0019-qtgui-fixed-apps-for-Qt5-compatibility.patch
+Patch116:       qt5-maint-0021-gnuradio-runtime-ctrlport-qt5.patch
+Patch117:       qt5-maint-0022-gr-uhd-qt5.patch
+Patch118:       qt5-maint-0023-gr-qtgui-util.patch
+Patch119:       qt5-maint-0024-gr-qtgui-restoreGeometry.patch
+#PATCH-FIX-OPENSUSE 
0001-Add-the-include-path-used-by-the-openSUSE-package.patch
+Patch120:       0001-Add-the-include-path-used-by-the-openSUSE-package.patch
 BuildRequires:  alsa-devel
 %if 0%{?suse_version} > 1325
 BuildRequires:  libboost_filesystem-devel
@@ -49,6 +72,7 @@
 BuildRequires:  gcc-c++
 BuildRequires:  gsl-devel
 BuildRequires:  libSDL-devel
+BuildRequires:  libgsm-devel
 BuildRequires:  libjack-devel
 BuildRequires:  libxslt-python
 BuildRequires:  memory-constraints
@@ -61,13 +85,19 @@
 BuildRequires:  python-lxml
 BuildRequires:  python-mako
 BuildRequires:  python-numpy
+%if 0%{?suse_version} > 1500
+BuildRequires:  python-qt5-devel
+BuildRequires:  qwt6-qt5-devel
+%else
 BuildRequires:  python-qt4-devel
 BuildRequires:  qwt6-devel
+%endif
 BuildRequires:  swig
 BuildRequires:  texlive-dvips
 BuildRequires:  texlive-latex
 BuildRequires:  uhd-devel
 BuildRequires:  update-desktop-files
+BuildRequires:  pkgconfig(codec2)
 BuildRequires:  pkgconfig(libusb-1.0)
 BuildRequires:  pkgconfig(libxml-2.0)
 # Workaround for openssl migration
@@ -77,7 +107,12 @@
 Requires:       python-gtk
 Requires:       python-lxml
 Requires:       python-numpy
+%if 0%{?suse_version} > 1500
+Requires:       python-qt5
+%else
 Requires:       python-qt4
+%endif
+
 %if 0%{?suse_version} > 1320
 BuildRequires:  python-wxWidgets-3_0
 %else
@@ -199,7 +234,31 @@
 %prep
 %setup -q
 tar xzf %{SOURCE3} -C volk/ --strip-components=1
-%patch2 -p1
+%patch0 -p1
+%if 0%{?suse_version} > 1500
+%patch100 -p1
+%patch101 -p1
+%patch102 -p1
+%patch103 -p1
+%patch104 -p1
+%patch105 -p1
+%patch106 -p1
+%patch107 -p1
+%patch108 -p1
+%patch109 -p1
+%patch110 -p1
+%patch111 -p1
+%patch112 -p1
+%patch113 -p1
+%patch114 -p1
+%patch115 -p1
+%patch116 -p1
+%patch117 -p1
+%patch118 -p1
+%patch119 -p1
+%patch120 -p1
+%endif
+
 # remove buildtime from documentation
 sed -i 's|^HTML_TIMESTAMP         = YES|HTML_TIMESTAMP         = NO|' 
docs/doxygen/Doxyfile.in
 sed -i 's|^HTML_TIMESTAMP         = YES|HTML_TIMESTAMP         = NO|' 
docs/doxygen/Doxyfile.swig_doc.in

++++++ 0001-Add-the-include-path-used-by-the-openSUSE-package.patch ++++++
>From a7f7123b32b00408cd32b34c479b3bc23c3ec359 Mon Sep 17 00:00:00 2001
From: Christophe Giboudeaux <[email protected]>
Date: Mon, 29 Apr 2019 12:53:48 +0200
Subject: [PATCH] Add the include path used by the openSUSE package.

---
 cmake/Modules/FindQwt.cmake | 1 +
 1 file changed, 1 insertion(+)

diff --git a/cmake/Modules/FindQwt.cmake b/cmake/Modules/FindQwt.cmake
index 2b83fbf..5d54a2b 100644
--- a/cmake/Modules/FindQwt.cmake
+++ b/cmake/Modules/FindQwt.cmake
@@ -19,6 +19,7 @@ find_path(QWT_INCLUDE_DIRS
   PATHS
   /usr/local/include/qwt-qt5
   /usr/local/include/qwt
+  /usr/include/qt5/qwt6
   /usr/include/qwt6
   /usr/include/qwt-qt5
   /usr/include/qwt
-- 
2.21.0



++++++ qt5-maint-0001-CMake-Update-required-minimum-version-to-2.8.12.patch 
++++++
>From b0f4ebcf6d656c829747dded592e182144098d42 Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Tue, 29 Sep 2015 13:57:13 +0200
Subject: [PATCH 01/22] CMake: Update required minimum version to 2.8.12

This is required to use the Qt5-specific macros.

Signed-off-by: Paul Cercueil <[email protected]>
---
 CMakeLists.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 59e3c886c4..ae6c1e1d49 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,7 +27,7 @@
 ########################################################################
 # Make sure this version matches ${GR_CMAKE_MIN_VERSION} (a variable can't be
 # used here).
-cmake_minimum_required(VERSION 2.6)
+cmake_minimum_required(VERSION 2.8.12)
 project(gnuradio CXX C)
 enable_testing()
 
-- 
2.11.0

++++++ 
qt5-maint-0002-CMake-FindQwt-Find-the-Qt5-version-of-QWT-instead-of.patch ++++++
>From 25dedc0a2a7f0790f280770a7d22e9650ae2adbf Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Tue, 29 Sep 2015 13:30:59 +0200
Subject: [PATCH 02/22] CMake: FindQwt: Find the Qt5 version of QWT instead of
 the Qt4 version

Signed-off-by: Paul Cercueil <[email protected]>
---
 cmake/Modules/FindQwt.cmake | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/cmake/Modules/FindQwt.cmake b/cmake/Modules/FindQwt.cmake
index da8bbe9049..2cffbe66f4 100644
--- a/cmake/Modules/FindQwt.cmake
+++ b/cmake/Modules/FindQwt.cmake
@@ -11,10 +11,10 @@ find_path(QWT_INCLUDE_DIRS
   ${CMAKE_INSTALL_PREFIX}/include/qwt
   ${CMAKE_PREFIX_PATH}/include/qwt
   PATHS
-  /usr/local/include/qwt-qt4
+  /usr/local/include/qwt-qt5
   /usr/local/include/qwt
   /usr/include/qwt6
-  /usr/include/qwt-qt4
+  /usr/include/qwt-qt5
   /usr/include/qwt
   /usr/include/qwt5
   /opt/local/include/qwt
@@ -23,7 +23,7 @@ find_path(QWT_INCLUDE_DIRS
 )
 
 find_library (QWT_LIBRARIES
-  NAMES qwt6 qwt6-qt4 qwt qwt-qt4 qwt5 qwtd5
+  NAMES qwt6 qwt6-qt5 qwt qwt-qt5
   HINTS
   ${CMAKE_INSTALL_PREFIX}/lib
   ${CMAKE_INSTALL_PREFIX}/lib64
-- 
2.11.0

++++++ qt5-maint-0003-gr-qtgui-update-for-Qt5.patch ++++++
>From 1f78d5f2176de31809dc34fb38945c181390cdef Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Tue, 29 Sep 2015 11:25:47 +0200
Subject: [PATCH 03/22] gr-qtgui: update for Qt5

This commit switch the gr-qtgui blocks from being usable with Qt4 to
being usable with Qt5.

Signed-off-by: Paul Cercueil <[email protected]>
---
 gr-qtgui/CMakeLists.txt                      | 11 ++++-------
 gr-qtgui/grc/qtgui_ber_sink_b.xml            |  2 +-
 gr-qtgui/grc/qtgui_check_box.xml             |  2 +-
 gr-qtgui/grc/qtgui_chooser.xml               |  4 ++--
 gr-qtgui/grc/qtgui_const_sink_x.xml          |  2 +-
 gr-qtgui/grc/qtgui_entry.xml                 |  2 +-
 gr-qtgui/grc/qtgui_freq_sink_x.xml           |  2 +-
 gr-qtgui/grc/qtgui_histogram_sink_x.xml      |  2 +-
 gr-qtgui/grc/qtgui_label.xml                 |  2 +-
 gr-qtgui/grc/qtgui_number_sink.xml           |  2 +-
 gr-qtgui/grc/qtgui_push_button.xml           |  2 +-
 gr-qtgui/grc/qtgui_sink_x.xml                |  2 +-
 gr-qtgui/grc/qtgui_tab_widget.xml            |  2 +-
 gr-qtgui/grc/qtgui_time_raster_x.xml         |  2 +-
 gr-qtgui/grc/qtgui_time_sink_x.xml           |  2 +-
 gr-qtgui/grc/qtgui_vector_sink_f.xml         |  2 +-
 gr-qtgui/grc/qtgui_waterfall_sink_x.xml      |  2 +-
 gr-qtgui/include/gnuradio/qtgui/form_menus.h |  1 +
 gr-qtgui/lib/CMakeLists.txt                  |  8 ++++----
 gr-qtgui/lib/SpectrumGUIClass.cc             |  1 -
 gr-qtgui/lib/const_sink_c_impl.cc            |  4 ----
 gr-qtgui/lib/freq_sink_c_impl.cc             |  4 ----
 gr-qtgui/lib/freq_sink_f_impl.cc             |  4 ----
 gr-qtgui/lib/histogram_sink_f_impl.cc        |  4 ----
 gr-qtgui/lib/sink_c_impl.cc                  |  4 ----
 gr-qtgui/lib/sink_f_impl.cc                  |  4 ----
 gr-qtgui/lib/time_raster_sink_b_impl.cc      |  4 ----
 gr-qtgui/lib/time_raster_sink_f_impl.cc      |  4 ----
 gr-qtgui/lib/time_sink_c_impl.cc             |  4 ----
 gr-qtgui/lib/time_sink_f_impl.cc             |  4 ----
 gr-qtgui/lib/vector_sink_f_impl.cc           |  4 ----
 gr-qtgui/lib/waterfall_sink_c_impl.cc        |  4 ----
 gr-qtgui/lib/waterfall_sink_f_impl.cc        |  4 ----
 gr-qtgui/python/qtgui/range.py               | 26 +++++++++++++-------------
 34 files changed, 39 insertions(+), 94 deletions(-)

--- a/gr-qtgui/CMakeLists.txt
+++ b/gr-qtgui/CMakeLists.txt
@@ -22,14 +22,14 @@
 ########################################################################
 include(GrBoost)
 
-find_package(Qt4 4.2.0 COMPONENTS QtCore QtGui)
+find_package(Qt5Widgets)
 
 find_package(Qwt)
 
 find_package(PythonLibs 2)
 
 include(GrPython)
-GR_PYTHON_CHECK_MODULE("PyQt4" PyQt4 True PYQT4_FOUND)
+GR_PYTHON_CHECK_MODULE("PyQt5" PyQt5 True PYQT5_FOUND)
 
 ########################################################################
 # Register component
@@ -37,13 +37,13 @@
 include(GrComponent)
 if(NOT CMAKE_CROSSCOMPILING)
     set(qt_gui_python_deps
-        PYQT4_FOUND
+        PYQT5_FOUND
     )
 endif(NOT CMAKE_CROSSCOMPILING)
 
 GR_REGISTER_COMPONENT("gr-qtgui" ENABLE_GR_QTGUI
     Boost_FOUND
-    QT4_FOUND
+    Qt5Widgets_FOUND
     QWT_FOUND
     ENABLE_VOLK
     ENABLE_GNURADIO_RUNTIME
@@ -66,9 +66,6 @@
 ########################################################################
 if(ENABLE_GR_QTGUI)
 
-# populate the environment with QT variables
-include(GrSetupQt4)
-
 ########################################################################
 # Setup CPack components
 ########################################################################
--- a/gr-qtgui/grc/qtgui_ber_sink_b.xml
+++ b/gr-qtgui/grc/qtgui_ber_sink_b.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Bercurve Sink</name>
   <key>qtgui_bercurve_sink</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <import>import numpy</import>
--- a/gr-qtgui/grc/qtgui_check_box.xml
+++ b/gr-qtgui/grc/qtgui_check_box.xml
@@ -8,7 +8,7 @@
 <block>
        <name>QT GUI Check Box</name>
        <key>variable_qtgui_check_box</key>
-       <import>from PyQt4 import Qt</import>
+       <import>from PyQt5 import Qt</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#set $win = '_%s_check_box'%$id
 #if not $label()
--- a/gr-qtgui/grc/qtgui_chooser.xml
+++ b/gr-qtgui/grc/qtgui_chooser.xml
@@ -8,8 +8,8 @@
 <block>
        <name>QT GUI Chooser</name>
        <key>variable_qtgui_chooser</key>
-       <import>from PyQt4 import Qt</import>
-       <import>from PyQt4.QtCore import QObject, pyqtSlot</import>
+       <import>from PyQt5 import Qt</import>
+       <import>from PyQt5.QtCore import QObject, pyqtSlot</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#slurp
 #set $all_options = [$option0, $option1, $option2, $option3, 
$option4][:int($num_opts())]
--- a/gr-qtgui/grc/qtgui_const_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_const_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Constellation Sink</name>
   <key>qtgui_const_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
--- a/gr-qtgui/grc/qtgui_entry.xml
+++ b/gr-qtgui/grc/qtgui_entry.xml
@@ -8,7 +8,7 @@
 <block>
        <name>QT GUI Entry</name>
        <key>variable_qtgui_entry</key>
-       <import>from PyQt4 import Qt</import>
+       <import>from PyQt5 import Qt</import>
        <import>from gnuradio import eng_notation</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#set $win = 'self._%s_tool_bar'%$id
--- a/gr-qtgui/grc/qtgui_freq_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_freq_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Frequency Sink</name>
   <key>qtgui_freq_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
--- a/gr-qtgui/grc/qtgui_histogram_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_histogram_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Histogram Sink</name>
   <key>qtgui_histogram_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
--- a/gr-qtgui/grc/qtgui_label.xml
+++ b/gr-qtgui/grc/qtgui_label.xml
@@ -9,7 +9,7 @@
 <block>
   <name>QT GUI Label</name>
   <key>variable_qtgui_label</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import eng_notation</import>
   <var_make>self.$(id) = $(id) = $value</var_make>
   <make>#set $win = 'self._%s_tool_bar'%$id
--- a/gr-qtgui/grc/qtgui_number_sink.xml
+++ b/gr-qtgui/grc/qtgui_number_sink.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Number Sink</name>
   <key>qtgui_number_sink</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
--- a/gr-qtgui/grc/qtgui_push_button.xml
+++ b/gr-qtgui/grc/qtgui_push_button.xml
@@ -8,7 +8,7 @@
 <block>
        <name>QT GUI Push Button</name>
        <key>variable_qtgui_push_button</key>
-       <import>from PyQt4 import Qt</import>
+       <import>from PyQt5 import Qt</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#set $win = '_%s_push_button'%$id
 #if not $label()
--- a/gr-qtgui/grc/qtgui_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Sink</name>
   <key>qtgui_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
--- a/gr-qtgui/grc/qtgui_tab_widget.xml
+++ b/gr-qtgui/grc/qtgui_tab_widget.xml
@@ -7,7 +7,7 @@
 <block>
        <name>QT GUI Tab Widget</name>
        <key>qtgui_tab_widget</key>
-       <import>from PyQt4 import Qt</import>
+       <import>from PyQt5 import Qt</import>
        <make>#set $win = 'self.%s'%$id
 Qt.QTabWidget()
 #set $all_labels = [$label0, $label1, $label2, $label3, $label4,
--- a/gr-qtgui/grc/qtgui_time_raster_x.xml
+++ b/gr-qtgui/grc/qtgui_time_raster_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Time Raster Sink</name>
   <key>qtgui_time_raster_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
--- a/gr-qtgui/grc/qtgui_time_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_time_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Time Sink</name>
   <key>qtgui_time_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
--- a/gr-qtgui/grc/qtgui_vector_sink_f.xml
+++ b/gr-qtgui/grc/qtgui_vector_sink_f.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Vector Sink</name>
   <key>qtgui_vector_sink_f</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
--- a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Waterfall Sink</name>
   <key>qtgui_waterfall_sink_x</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
--- a/gr-qtgui/include/gnuradio/qtgui/form_menus.h
+++ b/gr-qtgui/include/gnuradio/qtgui/form_menus.h
@@ -28,6 +28,7 @@
 #include <QtGui/QtGui>
 #include <QtGui/QIntValidator>
 #include <QtGui/QDoubleValidator>
+#include <QtWidgets/QtWidgets>
 #include <qwt_symbol.h>
 #include <gnuradio/filter/firdes.h>
 #include <gnuradio/qtgui/qtgui_types.h>
--- a/gr-qtgui/lib/CMakeLists.txt
+++ b/gr-qtgui/lib/CMakeLists.txt
@@ -45,8 +45,8 @@
     ${qtgui_mod_includedir}/VectorDisplayPlot.h
     edit_box_msg_impl.h
 )
-QT4_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
-QT4_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+QT5_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
+QT5_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
 
 #FIXME the sources expect <foo>.ui.h, but the macros generate ui_foo.h
 #avoid changing the sources by generating the header with the include
@@ -127,7 +127,7 @@
     ${GNURADIO_RUNTIME_INCLUDE_DIRS}
     ${VOLK_INCLUDE_DIRS}
     ${QWT_INCLUDE_DIRS}
-    ${QT_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
     ${FFTW3F_INCLUDE_DIRS}
     ${Boost_INCLUDE_DIRS}
     ${PYTHON_INCLUDE_DIRS}
@@ -154,7 +154,7 @@
     gnuradio-filter
     ${VOLK_LIBRARIES}
     ${QWT_LIBRARIES}
-    ${QT_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
     ${FFTW3F_LIBRARIES}
 )
 if (WIN32)
--- a/gr-qtgui/lib/SpectrumGUIClass.cc
+++ b/gr-qtgui/lib/SpectrumGUIClass.cc
@@ -26,7 +26,6 @@
 #include <gnuradio/qtgui/SpectrumGUIClass.h>
 //Added by qt3to4:
 #include <QEvent>
-#include <QCustomEvent>
 #include <volk/volk.h>
 
 const long SpectrumGUIClass::MAX_FFT_SIZE = 32768;
--- a/gr-qtgui/lib/const_sink_c_impl.cc
+++ b/gr-qtgui/lib/const_sink_c_impl.cc
@@ -127,10 +127,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/freq_sink_c_impl.cc
+++ b/gr-qtgui/lib/freq_sink_c_impl.cc
@@ -156,10 +156,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
         d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/freq_sink_f_impl.cc
+++ b/gr-qtgui/lib/freq_sink_f_impl.cc
@@ -155,10 +155,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/histogram_sink_f_impl.cc
+++ b/gr-qtgui/lib/histogram_sink_f_impl.cc
@@ -115,10 +115,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/sink_c_impl.cc
+++ b/gr-qtgui/lib/sink_c_impl.cc
@@ -131,10 +131,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/sink_f_impl.cc
+++ b/gr-qtgui/lib/sink_f_impl.cc
@@ -131,10 +131,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/time_raster_sink_b_impl.cc
+++ b/gr-qtgui/lib/time_raster_sink_b_impl.cc
@@ -130,10 +130,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/time_raster_sink_f_impl.cc
+++ b/gr-qtgui/lib/time_raster_sink_f_impl.cc
@@ -128,10 +128,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/time_sink_c_impl.cc
+++ b/gr-qtgui/lib/time_sink_c_impl.cc
@@ -134,10 +134,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/time_sink_f_impl.cc
+++ b/gr-qtgui/lib/time_sink_f_impl.cc
@@ -129,10 +129,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/vector_sink_f_impl.cc
+++ b/gr-qtgui/lib/vector_sink_f_impl.cc
@@ -140,10 +140,6 @@
         d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
         d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/waterfall_sink_c_impl.cc
+++ b/gr-qtgui/lib/waterfall_sink_c_impl.cc
@@ -159,10 +159,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/waterfall_sink_f_impl.cc
+++ b/gr-qtgui/lib/waterfall_sink_f_impl.cc
@@ -155,10 +155,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/python/qtgui/range.py
+++ b/gr-qtgui/python/qtgui/range.py
@@ -21,7 +21,7 @@
 # Boston, MA 02110-1301, USA.
 #
 
-from PyQt4 import Qt, QtCore, QtGui
+from PyQt5 import Qt, QtCore, QtWidgets
 import util
 
 class Range(object):
@@ -64,10 +64,10 @@
         return (val*self.step+self.min)
 
 
-class RangeWidget(QtGui.QWidget):
+class RangeWidget(QtWidgets.QWidget):
     def __init__(self, ranges, slot, label, style, rangeType=float):
         """ Creates the QT Range widget """
-        QtGui.QWidget.__init__(self)
+        QtWidgets.QWidget.__init__(self)
 
         self.range = ranges
         self.style = style
@@ -98,10 +98,10 @@
         layout.addWidget(self.d_widget)
         self.setLayout(layout)
 
-    class Dial(QtGui.QDial):
+    class Dial(QtWidgets.QDial):
         """ Creates the range using a dial """
         def __init__(self, parent, ranges, slot, rangeType=float):
-            QtGui.QDial.__init__(self, parent)
+            QtWidgets.QDial.__init__(self, parent)
 
             self.rangeType = rangeType
 
@@ -124,10 +124,10 @@
             val = self.range.map_range(value)
             self.notifyChanged(self.rangeType(val))
 
-    class Slider(QtGui.QSlider):
+    class Slider(QtWidgets.QSlider):
         """ Creates the range using a slider """
         def __init__(self, parent, ranges, slot, rangeType=float):
-            QtGui.QSlider.__init__(self, QtCore.Qt.Horizontal, parent)
+            QtWidgets.QSlider.__init__(self, QtCore.Qt.Horizontal, parent)
 
             self.rangeType = rangeType
 
@@ -166,18 +166,18 @@
                 event.accept()
             # Use repaint rather than calling the super mousePressEvent.
             # Calling super causes issue where slider jumps to wrong value.
-            QtGui.QSlider.repaint(self)
+            QtWidgets.QSlider.repaint(self)
 
         def mouseMoveEvent(self, event):
             new = self.minimum() + ((self.maximum()-self.minimum()) * 
event.x()) / self.width()
             self.setValue(new)
             event.accept()
-            QtGui.QSlider.repaint(self)
+            QtWidgets.QSlider.repaint(self)
 
-    class Counter(QtGui.QDoubleSpinBox):
+    class Counter(QtWidgets.QDoubleSpinBox):
         """ Creates the range using a counter """
         def __init__(self, parent, ranges, slot, rangeType=float):
-            QtGui.QDoubleSpinBox.__init__(self, parent)
+            QtWidgets.QDoubleSpinBox.__init__(self, parent)
 
             self.rangeType = rangeType
 
@@ -196,10 +196,10 @@
             """ Handle the valueChanged signal by converting to the right type 
"""
             self.notifyChanged(self.rangeType(value))
 
-    class CounterSlider(QtGui.QWidget):
+    class CounterSlider(QtWidgets.QWidget):
         """ Creates the range using a counter and slider """
         def __init__(self, parent, ranges, slot, rangeType=float):
-            QtGui.QWidget.__init__(self, parent)
+            QtWidgets.QWidget.__init__(self, parent)
 
             self.rangeType = rangeType
 
++++++ qt5-maint-0004-grc-Generate-Python-scripts-that-use-PyQt5.patch ++++++
>From e58eb487c4119866f8c820658c8cda173bc96370 Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Tue, 29 Sep 2015 13:22:46 +0200
Subject: [PATCH 04/22] grc: Generate Python scripts that use PyQt5

Signed-off-by: Paul Cercueil <[email protected]>
---
 grc/blocks/options.xml             | 2 +-
 grc/core/generator/flow_graph.tmpl | 8 ++------
 2 files changed, 3 insertions(+), 7 deletions(-)

--- a/grc/blocks/options.xml
+++ b/grc/blocks/options.xml
@@ -16,7 +16,7 @@
 import wx
 #end if
 #if $generate_options() == 'qt_gui'
-from PyQt4 import Qt
+from PyQt5 import Qt
 import sys
 #end if
 #if $generate_options() == 'bokeh_gui'
--- a/grc/core/generator/flow_graph.tmpl
+++ b/grc/core/generator/flow_graph.tmpl
@@ -118,7 +118,7 @@
         self.top_layout.addLayout(self.top_grid_layout)
 
         self.settings = Qt.QSettings("GNU Radio", "$class_name")
-        self.restoreGeometry(self.settings.value("geometry").toByteArray())
+        self.restoreGeometry(self.settings.value("geometry"))
 
 #elif $generate_options == 'bokeh_gui'
 
@@ -435,10 +435,6 @@
         serverProc.terminate()
         serverProc.kill()
     #elif $generate_options == 'qt_gui'
-    from distutils.version import StrictVersion
-    if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
-        style = gr.prefs().get_string('qtgui', 'style', 'raster')
-        Qt.QApplication.setGraphicsSystem(style)
     qapp = Qt.QApplication(sys.argv)
 
     tb = top_block_cls($(', '.join($params_eq_list)))
@@ -457,7 +453,7 @@
     def quitting():
         tb.stop()
         tb.wait()
-    qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
+    qapp.aboutToQuit.connect(quitting)
         #for $m in $monitors
     if $m.has_param('en'):
         if $m.get_param('en').get_value():
++++++ 
qt5-maint-0005-gr-qtgui-Add-a-workaround-for-an-upstream-bug-of-uic.patch ++++++
>From 45c65ebeefcb20c2d2480b11b299d49f288c3b73 Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Mon, 12 Oct 2015 12:19:42 +0200
Subject: [PATCH 05/22] gr-qtgui: Add a workaround for an upstream bug of 'uic'

The Qt5 version of the 'uic' compiler generates incorrect code right now.
The bug has been reported (https://bugreports.qt.io/browse/QTBUG-48492) and
is pending review.

Signed-off-by: Paul Cercueil <[email protected]>
---
 gr-qtgui/include/QtWidgets/QRegExpValidator | 9 +++++++++
 1 file changed, 9 insertions(+)
 create mode 100644 gr-qtgui/include/QtWidgets/QRegExpValidator

diff --git a/gr-qtgui/include/QtWidgets/QRegExpValidator 
b/gr-qtgui/include/QtWidgets/QRegExpValidator
new file mode 100644
index 0000000000..17f6ce8333
--- /dev/null
+++ b/gr-qtgui/include/QtWidgets/QRegExpValidator
@@ -0,0 +1,9 @@
+/*
+ * The Qt5 version of the 'uic' compiler generates incorrect code right now.
+ * The bug has been reported (https://bugreports.qt.io/browse/QTBUG-48492) and
+ * is pending review.
+ *
+ * This file will make sure that the build of gr-qtgui will succeed with the
+ * broken version of 'uic'.
+ */
+#include <QtGui/QRegExpValidator>
-- 
2.11.0

++++++ qt5-maint-0006-qtgui-fixed-examples-for-Qt5-compatibility.patch ++++++
++++ 4737 lines (skipped)

++++++ qt5-maint-0007-qtgui-Fixes-for-edit_box_msg-to-work-with-QT5.patch ++++++
>From 1dae9e033016f35416cb433a8a129b4f011eb8c1 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <[email protected]>
Date: Thu, 28 Apr 2016 10:53:12 -0400
Subject: [PATCH 07/22] qtgui: Fixes for edit_box_msg to work with QT5.

---
 gr-qtgui/examples/c++/CMakeLists.txt | 20 +++++++++++---------
 gr-qtgui/grc/qtgui_edit_box_msg.xml  |  2 +-
 gr-qtgui/lib/edit_box_msg_impl.cc    |  4 ----
 3 files changed, 12 insertions(+), 14 deletions(-)

--- a/gr-qtgui/examples/c++/CMakeLists.txt
+++ b/gr-qtgui/examples/c++/CMakeLists.txt
@@ -18,14 +18,14 @@
 # Boston, MA 02110-1301, USA.
 
 include_directories(
-  ${GR_QTGUI_INCLUDE_DIRS}
-  ${GR_ANALOG_INCLUDE_DIRS}
-  ${GR_FILTER_INCLUDE_DIRS}
-  ${GR_BLOCKS_INCLUDE_DIRS}
-  ${GR_FFT_INCLUDE_DIRS}
-  ${GNURADIO_RUNTIME_INCLUDE_DIRS}
-  ${QT_INCLUDE_DIRS}
-  ${Boost_INCLUDE_DIRS}
+       ${GR_QTGUI_INCLUDE_DIRS}
+       ${GR_ANALOG_INCLUDE_DIRS}
+       ${GR_FILTER_INCLUDE_DIRS}
+       ${GR_BLOCKS_INCLUDE_DIRS}
+       ${GR_FFT_INCLUDE_DIRS}
+       ${GNURADIO_RUNTIME_INCLUDE_DIRS}
+        ${Qt5Widgets_INCLUDE_DIRS}
+        ${Boost_INCLUDE_DIRS}
 )
 
 list(APPEND QTGUI_LIBRARIES
@@ -35,9 +35,11 @@
   gnuradio-blocks
   gnuradio-fft
   gnuradio-runtime
+  ${QWT_LIBRARY_DIRS}
+  ${Qt5Widgets_LIBRARIES}
 )
 
-QT4_WRAP_CPP(qtgui_moc_sources display_qt.h)
+QT5_WRAP_CPP(qtgui_moc_sources display_qt.h)
 add_executable(display_qt display_qt.cc ${qtgui_moc_sources})
 target_link_libraries(display_qt ${QTGUI_LIBRARIES})
 
--- a/gr-qtgui/grc/qtgui_edit_box_msg.xml
+++ b/gr-qtgui/grc/qtgui_edit_box_msg.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Message Edit Box</name>
   <key>qtgui_edit_box_msg</key>
-  <import>from PyQt4 import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
--- a/gr-qtgui/lib/edit_box_msg_impl.cc
+++ b/gr-qtgui/lib/edit_box_msg_impl.cc
@@ -66,10 +66,6 @@
        d_qApplication = qApp;
       }
       else {
-#if QT_VERSION >= 0x040500
-        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
-        QApplication::setGraphicsSystem(QString(style.c_str()));
-#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
++++++ qt5-maint-0008-gr-qtgui-Allow-build-with-Qt4-or-Qt5-default.patch ++++++
>From aa06972a708d3559eae667dd9484edadf722d73c Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Mon, 20 Jun 2016 18:37:43 +0200
Subject: [PATCH 08/22] gr-qtgui: Allow build with Qt4 or Qt5 (default)

Signed-off-by: Paul Cercueil <[email protected]>
---
 gr-qtgui/CMakeLists.txt                      | 27 ++++++++++++++++++++-------
 gr-qtgui/examples/c++/CMakeLists.txt         | 11 ++++++++---
 gr-qtgui/include/gnuradio/qtgui/form_menus.h |  4 ++++
 gr-qtgui/lib/CMakeLists.txt                  | 14 ++++++++++----
 4 files changed, 42 insertions(+), 14 deletions(-)

--- a/gr-qtgui/CMakeLists.txt
+++ b/gr-qtgui/CMakeLists.txt
@@ -22,14 +22,27 @@
 ########################################################################
 include(GrBoost)
 
-find_package(Qt5Widgets)
-
-find_package(Qwt)
-
 find_package(PythonLibs 2)
 
 include(GrPython)
-GR_PYTHON_CHECK_MODULE("PyQt5" PyQt5 True PYQT5_FOUND)
+
+set(DESIRED_QT_VERSION 5 CACHE STRING "The Qt version to use (4 or 5)")
+set_property(CACHE DESIRED_QT_VERSION PROPERTY STRINGS 4 5)
+
+if (DESIRED_QT_VERSION MATCHES 4)
+    find_package(Qt4 COMPONENTS QtCore QtGui)
+    set(QT_FOUND ${Qt4_FOUND})
+    include(GrSetupQt4)
+else()
+    find_package(Qt5Widgets)
+    set(QT_FOUND ${Qt5Widgets_FOUND})
+    set(QT_LIBRARIES ${Qt5Widgets_LIBRARIES})
+    set(QT_INCLUDE_DIRS ${Qt5Widgets_INCLUDE_DIRS})
+endif()
+
+GR_PYTHON_CHECK_MODULE("PyQt${DESIRED_QT_VERSION}" PyQt${DESIRED_QT_VERSION} 
True PYQT${DESIRED_QT_VERSION}_FOUND)
+
+find_package(Qwt)
 
 ########################################################################
 # Register component
@@ -37,13 +50,13 @@
 include(GrComponent)
 if(NOT CMAKE_CROSSCOMPILING)
     set(qt_gui_python_deps
-        PYQT5_FOUND
+        PYQT${DESIRED_QT_VERSION}_FOUND
     )
 endif(NOT CMAKE_CROSSCOMPILING)
 
 GR_REGISTER_COMPONENT("gr-qtgui" ENABLE_GR_QTGUI
     Boost_FOUND
-    Qt5Widgets_FOUND
+    QT_FOUND
     QWT_FOUND
     ENABLE_VOLK
     ENABLE_GNURADIO_RUNTIME
--- a/gr-qtgui/examples/c++/CMakeLists.txt
+++ b/gr-qtgui/examples/c++/CMakeLists.txt
@@ -24,7 +24,7 @@
        ${GR_BLOCKS_INCLUDE_DIRS}
        ${GR_FFT_INCLUDE_DIRS}
        ${GNURADIO_RUNTIME_INCLUDE_DIRS}
-        ${Qt5Widgets_INCLUDE_DIRS}
+        ${QT_INCLUDE_DIRS}
         ${Boost_INCLUDE_DIRS}
 )
 
@@ -36,10 +36,15 @@
   gnuradio-fft
   gnuradio-runtime
   ${QWT_LIBRARY_DIRS}
-  ${Qt5Widgets_LIBRARIES}
+  ${QT_LIBRARIES}
 )
 
-QT5_WRAP_CPP(qtgui_moc_sources display_qt.h)
+if (${DESIRED_QT_VERSION} MATCHES 4)
+    QT4_WRAP_CPP(qtgui_moc_sources display_qt.h)
+else()
+    QT5_WRAP_CPP(qtgui_moc_sources display_qt.h)
+endif()
+
 add_executable(display_qt display_qt.cc ${qtgui_moc_sources})
 target_link_libraries(display_qt ${QTGUI_LIBRARIES})
 
--- a/gr-qtgui/include/gnuradio/qtgui/form_menus.h
+++ b/gr-qtgui/include/gnuradio/qtgui/form_menus.h
@@ -28,7 +28,11 @@
 #include <QtGui/QtGui>
 #include <QtGui/QIntValidator>
 #include <QtGui/QDoubleValidator>
+
+#if QT_VERSION >= 0x050000
 #include <QtWidgets/QtWidgets>
+#endif
+
 #include <qwt_symbol.h>
 #include <gnuradio/filter/firdes.h>
 #include <gnuradio/qtgui/qtgui_types.h>
--- a/gr-qtgui/lib/CMakeLists.txt
+++ b/gr-qtgui/lib/CMakeLists.txt
@@ -45,8 +45,14 @@
     ${qtgui_mod_includedir}/VectorDisplayPlot.h
     edit_box_msg_impl.h
 )
-QT5_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
-QT5_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+
+if (${DESIRED_QT_VERSION} MATCHES 4)
+    QT4_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
+    QT4_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+else()
+    QT5_WRAP_CPP(qtgui_moc_sources ${qtgui_moc_hdrs})
+    QT5_WRAP_UI(qtgui_ui_hdrs spectrumdisplayform.ui)
+endif()
 
 #FIXME the sources expect <foo>.ui.h, but the macros generate ui_foo.h
 #avoid changing the sources by generating the header with the include
@@ -127,7 +133,7 @@
     ${GNURADIO_RUNTIME_INCLUDE_DIRS}
     ${VOLK_INCLUDE_DIRS}
     ${QWT_INCLUDE_DIRS}
-    ${Qt5Widgets_INCLUDE_DIRS}
+    ${QT_INCLUDE_DIRS}
     ${FFTW3F_INCLUDE_DIRS}
     ${Boost_INCLUDE_DIRS}
     ${PYTHON_INCLUDE_DIRS}
@@ -154,7 +160,7 @@
     gnuradio-filter
     ${VOLK_LIBRARIES}
     ${QWT_LIBRARIES}
-    ${Qt5Widgets_LIBRARIES}
+    ${QT_LIBRARIES}
     ${FFTW3F_LIBRARIES}
 )
 if (WIN32)
++++++ qt5-maint-0009-gr-qtgui-Fix-PyQt-4-5-include-in-XMLs-for-GRC.patch ++++++
>From dc3db3b5ac29769aa4ab571a670d26e2fc7b6bf6 Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Tue, 21 Jun 2016 17:42:45 +0200
Subject: [PATCH 09/22] gr-qtgui: Fix PyQt[4,5] include in XMLs for GRC

Signed-off-by: Paul Cercueil <[email protected]>
---
 gr-qtgui/grc/CMakeLists.txt                                      | 9 ++++++++-
 .../grc/{qtgui_ber_sink_b.xml => qtgui_ber_sink_b.xml.cmakein}   | 2 +-
 .../grc/{qtgui_block_tree.xml => qtgui_block_tree.xml.cmakein}   | 0
 .../grc/{qtgui_check_box.xml => qtgui_check_box.xml.cmakein}     | 2 +-
 gr-qtgui/grc/{qtgui_chooser.xml => qtgui_chooser.xml.cmakein}    | 4 ++--
 .../{qtgui_const_sink_x.xml => qtgui_const_sink_x.xml.cmakein}   | 2 +-
 .../{qtgui_edit_box_msg.xml => qtgui_edit_box_msg.xml.cmakein}   | 2 +-
 gr-qtgui/grc/{qtgui_entry.xml => qtgui_entry.xml.cmakein}        | 2 +-
 .../grc/{qtgui_freq_sink_x.xml => qtgui_freq_sink_x.xml.cmakein} | 2 +-
 ...i_histogram_sink_x.xml => qtgui_histogram_sink_x.xml.cmakein} | 2 +-
 gr-qtgui/grc/{qtgui_label.xml => qtgui_label.xml.cmakein}        | 2 +-
 .../grc/{qtgui_number_sink.xml => qtgui_number_sink.xml.cmakein} | 2 +-
 .../grc/{qtgui_push_button.xml => qtgui_push_button.xml.cmakein} | 2 +-
 gr-qtgui/grc/{qtgui_range.xml => qtgui_range.xml.cmakein}        | 0
 gr-qtgui/grc/{qtgui_sink_x.xml => qtgui_sink_x.xml.cmakein}      | 2 +-
 .../grc/{qtgui_tab_widget.xml => qtgui_tab_widget.xml.cmakein}   | 2 +-
 .../{qtgui_time_raster_x.xml => qtgui_time_raster_x.xml.cmakein} | 2 +-
 .../grc/{qtgui_time_sink_x.xml => qtgui_time_sink_x.xml.cmakein} | 2 +-
 .../{qtgui_vector_sink_f.xml => qtgui_vector_sink_f.xml.cmakein} | 2 +-
 ...i_waterfall_sink_x.xml => qtgui_waterfall_sink_x.xml.cmakein} | 2 +-
 20 files changed, 26 insertions(+), 19 deletions(-)
 rename gr-qtgui/grc/{qtgui_ber_sink_b.xml => qtgui_ber_sink_b.xml.cmakein} 
(99%)
 rename gr-qtgui/grc/{qtgui_block_tree.xml => qtgui_block_tree.xml.cmakein} 
(100%)
 rename gr-qtgui/grc/{qtgui_check_box.xml => qtgui_check_box.xml.cmakein} (97%)
 rename gr-qtgui/grc/{qtgui_chooser.xml => qtgui_chooser.xml.cmakein} (98%)
 rename gr-qtgui/grc/{qtgui_const_sink_x.xml => qtgui_const_sink_x.xml.cmakein} 
(99%)
 rename gr-qtgui/grc/{qtgui_edit_box_msg.xml => qtgui_edit_box_msg.xml.cmakein} 
(98%)
 rename gr-qtgui/grc/{qtgui_entry.xml => qtgui_entry.xml.cmakein} (97%)
 rename gr-qtgui/grc/{qtgui_freq_sink_x.xml => qtgui_freq_sink_x.xml.cmakein} 
(99%)
 rename gr-qtgui/grc/{qtgui_histogram_sink_x.xml => 
qtgui_histogram_sink_x.xml.cmakein} (99%)
 rename gr-qtgui/grc/{qtgui_label.xml => qtgui_label.xml.cmakein} (97%)
 rename gr-qtgui/grc/{qtgui_number_sink.xml => qtgui_number_sink.xml.cmakein} 
(99%)
 rename gr-qtgui/grc/{qtgui_push_button.xml => qtgui_push_button.xml.cmakein} 
(97%)
 rename gr-qtgui/grc/{qtgui_range.xml => qtgui_range.xml.cmakein} (100%)
 rename gr-qtgui/grc/{qtgui_sink_x.xml => qtgui_sink_x.xml.cmakein} (98%)
 rename gr-qtgui/grc/{qtgui_tab_widget.xml => qtgui_tab_widget.xml.cmakein} 
(99%)
 rename gr-qtgui/grc/{qtgui_time_raster_x.xml => 
qtgui_time_raster_x.xml.cmakein} (99%)
 rename gr-qtgui/grc/{qtgui_time_sink_x.xml => qtgui_time_sink_x.xml.cmakein} 
(99%)
 rename gr-qtgui/grc/{qtgui_vector_sink_f.xml => 
qtgui_vector_sink_f.xml.cmakein} (99%)
 rename gr-qtgui/grc/{qtgui_waterfall_sink_x.xml => 
qtgui_waterfall_sink_x.xml.cmakein} (99%)

diff --git a/gr-qtgui/grc/CMakeLists.txt b/gr-qtgui/grc/CMakeLists.txt
index d56158ac70..d01bcc52c4 100644
--- a/gr-qtgui/grc/CMakeLists.txt
+++ b/gr-qtgui/grc/CMakeLists.txt
@@ -18,5 +18,12 @@
 # Boston, MA 02110-1301, USA.
 
 ########################################################################
-file(GLOB xml_files "*.xml")
+file(GLOB xml_cmakein_files "*.xml.cmakein")
+
+foreach(xml_cmakein_file IN ITEMS ${xml_cmakein_files})
+       get_filename_component(FILE_NAME ${xml_cmakein_file} NAME_WE)
+       configure_file(${xml_cmakein_file} 
"${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.xml" @ONLY)
+       set(xml_files ${xml_files} 
"${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.xml")
+endforeach(xml_cmakein_file)
+
 install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR} COMPONENT 
"qtgui_python")
diff --git a/gr-qtgui/grc/qtgui_ber_sink_b.xml 
b/gr-qtgui/grc/qtgui_ber_sink_b.xml.cmakein
similarity index 99%
rename from gr-qtgui/grc/qtgui_ber_sink_b.xml
rename to gr-qtgui/grc/qtgui_ber_sink_b.xml.cmakein
index 085bf282be..91a87ce595 100644
--- a/gr-qtgui/grc/qtgui_ber_sink_b.xml
+++ b/gr-qtgui/grc/qtgui_ber_sink_b.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Bercurve Sink</name>
   <key>qtgui_bercurve_sink</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <import>import numpy</import>
diff --git a/gr-qtgui/grc/qtgui_block_tree.xml 
b/gr-qtgui/grc/qtgui_block_tree.xml.cmakein
similarity index 100%
rename from gr-qtgui/grc/qtgui_block_tree.xml
rename to gr-qtgui/grc/qtgui_block_tree.xml.cmakein
diff --git a/gr-qtgui/grc/qtgui_check_box.xml 
b/gr-qtgui/grc/qtgui_check_box.xml.cmakein
similarity index 97%
rename from gr-qtgui/grc/qtgui_check_box.xml
rename to gr-qtgui/grc/qtgui_check_box.xml.cmakein
index ccee59dd92..9edacb24d8 100644
--- a/gr-qtgui/grc/qtgui_check_box.xml
+++ b/gr-qtgui/grc/qtgui_check_box.xml.cmakein
@@ -8,7 +8,7 @@
 <block>
        <name>QT GUI Check Box</name>
        <key>variable_qtgui_check_box</key>
-       <import>from PyQt5 import Qt</import>
+       <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#set $win = '_%s_check_box'%$id
 #if not $label()
diff --git a/gr-qtgui/grc/qtgui_chooser.xml 
b/gr-qtgui/grc/qtgui_chooser.xml.cmakein
similarity index 98%
rename from gr-qtgui/grc/qtgui_chooser.xml
rename to gr-qtgui/grc/qtgui_chooser.xml.cmakein
index f79bb8ccb3..40c782bede 100644
--- a/gr-qtgui/grc/qtgui_chooser.xml
+++ b/gr-qtgui/grc/qtgui_chooser.xml.cmakein
@@ -8,8 +8,8 @@
 <block>
        <name>QT GUI Chooser</name>
        <key>variable_qtgui_chooser</key>
-       <import>from PyQt5 import Qt</import>
-       <import>from PyQt5.QtCore import QObject, pyqtSlot</import>
+       <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+       <import>from PyQt@[email protected] import QObject, 
pyqtSlot</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#slurp
 #set $all_options = [$option0, $option1, $option2, $option3, 
$option4][:int($num_opts())]
diff --git a/gr-qtgui/grc/qtgui_const_sink_x.xml 
b/gr-qtgui/grc/qtgui_const_sink_x.xml.cmakein
similarity index 99%
rename from gr-qtgui/grc/qtgui_const_sink_x.xml
rename to gr-qtgui/grc/qtgui_const_sink_x.xml.cmakein
index 10f82cce82..6fa725acb1 100644
--- a/gr-qtgui/grc/qtgui_const_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_const_sink_x.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Constellation Sink</name>
   <key>qtgui_const_sink_x</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_edit_box_msg.xml 
b/gr-qtgui/grc/qtgui_edit_box_msg.xml.cmakein
similarity index 98%
rename from gr-qtgui/grc/qtgui_edit_box_msg.xml
rename to gr-qtgui/grc/qtgui_edit_box_msg.xml.cmakein
index d77a4b3e1b..75ff93349f 100644
--- a/gr-qtgui/grc/qtgui_edit_box_msg.xml
+++ b/gr-qtgui/grc/qtgui_edit_box_msg.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Message Edit Box</name>
   <key>qtgui_edit_box_msg</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_entry.xml b/gr-qtgui/grc/qtgui_entry.xml.cmakein
similarity index 97%
rename from gr-qtgui/grc/qtgui_entry.xml
rename to gr-qtgui/grc/qtgui_entry.xml.cmakein
index fc0f4089d1..da61ee723a 100644
--- a/gr-qtgui/grc/qtgui_entry.xml
+++ b/gr-qtgui/grc/qtgui_entry.xml.cmakein
@@ -8,7 +8,7 @@
 <block>
        <name>QT GUI Entry</name>
        <key>variable_qtgui_entry</key>
-       <import>from PyQt5 import Qt</import>
+       <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
        <import>from gnuradio import eng_notation</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#set $win = 'self._%s_tool_bar'%$id
diff --git a/gr-qtgui/grc/qtgui_freq_sink_x.xml 
b/gr-qtgui/grc/qtgui_freq_sink_x.xml.cmakein
similarity index 99%
rename from gr-qtgui/grc/qtgui_freq_sink_x.xml
rename to gr-qtgui/grc/qtgui_freq_sink_x.xml.cmakein
index ed39db7781..aaf0d75271 100644
--- a/gr-qtgui/grc/qtgui_freq_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_freq_sink_x.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Frequency Sink</name>
   <key>qtgui_freq_sink_x</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_histogram_sink_x.xml 
b/gr-qtgui/grc/qtgui_histogram_sink_x.xml.cmakein
similarity index 99%
rename from gr-qtgui/grc/qtgui_histogram_sink_x.xml
rename to gr-qtgui/grc/qtgui_histogram_sink_x.xml.cmakein
index 9e3dcb104f..d04a44da13 100644
--- a/gr-qtgui/grc/qtgui_histogram_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_histogram_sink_x.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Histogram Sink</name>
   <key>qtgui_histogram_sink_x</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_label.xml b/gr-qtgui/grc/qtgui_label.xml.cmakein
similarity index 97%
rename from gr-qtgui/grc/qtgui_label.xml
rename to gr-qtgui/grc/qtgui_label.xml.cmakein
index 946cee36ab..c546e09dcc 100644
--- a/gr-qtgui/grc/qtgui_label.xml
+++ b/gr-qtgui/grc/qtgui_label.xml.cmakein
@@ -9,7 +9,7 @@
 <block>
   <name>QT GUI Label</name>
   <key>variable_qtgui_label</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import eng_notation</import>
   <var_make>self.$(id) = $(id) = $value</var_make>
   <make>#set $win = 'self._%s_tool_bar'%$id
diff --git a/gr-qtgui/grc/qtgui_number_sink.xml 
b/gr-qtgui/grc/qtgui_number_sink.xml.cmakein
similarity index 99%
rename from gr-qtgui/grc/qtgui_number_sink.xml
rename to gr-qtgui/grc/qtgui_number_sink.xml.cmakein
index 06837493c3..d4b4c5808f 100644
--- a/gr-qtgui/grc/qtgui_number_sink.xml
+++ b/gr-qtgui/grc/qtgui_number_sink.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Number Sink</name>
   <key>qtgui_number_sink</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_push_button.xml 
b/gr-qtgui/grc/qtgui_push_button.xml.cmakein
similarity index 97%
rename from gr-qtgui/grc/qtgui_push_button.xml
rename to gr-qtgui/grc/qtgui_push_button.xml.cmakein
index 49c2e9d6f0..d99f230acf 100644
--- a/gr-qtgui/grc/qtgui_push_button.xml
+++ b/gr-qtgui/grc/qtgui_push_button.xml.cmakein
@@ -8,7 +8,7 @@
 <block>
        <name>QT GUI Push Button</name>
        <key>variable_qtgui_push_button</key>
-       <import>from PyQt5 import Qt</import>
+       <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#set $win = '_%s_push_button'%$id
 #if not $label()
diff --git a/gr-qtgui/grc/qtgui_range.xml b/gr-qtgui/grc/qtgui_range.xml.cmakein
similarity index 100%
rename from gr-qtgui/grc/qtgui_range.xml
rename to gr-qtgui/grc/qtgui_range.xml.cmakein
diff --git a/gr-qtgui/grc/qtgui_sink_x.xml 
b/gr-qtgui/grc/qtgui_sink_x.xml.cmakein
similarity index 98%
rename from gr-qtgui/grc/qtgui_sink_x.xml
rename to gr-qtgui/grc/qtgui_sink_x.xml.cmakein
index a9bc469cd2..1c75921a75 100644
--- a/gr-qtgui/grc/qtgui_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_sink_x.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Sink</name>
   <key>qtgui_sink_x</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_tab_widget.xml 
b/gr-qtgui/grc/qtgui_tab_widget.xml.cmakein
similarity index 99%
rename from gr-qtgui/grc/qtgui_tab_widget.xml
rename to gr-qtgui/grc/qtgui_tab_widget.xml.cmakein
index 805542cc8b..f5a1a73cdc 100644
--- a/gr-qtgui/grc/qtgui_tab_widget.xml
+++ b/gr-qtgui/grc/qtgui_tab_widget.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
        <name>QT GUI Tab Widget</name>
        <key>qtgui_tab_widget</key>
-       <import>from PyQt5 import Qt</import>
+       <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
        <make>#set $win = 'self.%s'%$id
 Qt.QTabWidget()
 #set $all_labels = [$label0, $label1, $label2, $label3, $label4,
diff --git a/gr-qtgui/grc/qtgui_time_raster_x.xml 
b/gr-qtgui/grc/qtgui_time_raster_x.xml.cmakein
similarity index 99%
rename from gr-qtgui/grc/qtgui_time_raster_x.xml
rename to gr-qtgui/grc/qtgui_time_raster_x.xml.cmakein
index d458f67eb9..94b7ef136a 100644
--- a/gr-qtgui/grc/qtgui_time_raster_x.xml
+++ b/gr-qtgui/grc/qtgui_time_raster_x.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Time Raster Sink</name>
   <key>qtgui_time_raster_sink_x</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_time_sink_x.xml 
b/gr-qtgui/grc/qtgui_time_sink_x.xml.cmakein
similarity index 99%
rename from gr-qtgui/grc/qtgui_time_sink_x.xml
rename to gr-qtgui/grc/qtgui_time_sink_x.xml.cmakein
index d4347950ea..d239917907 100644
--- a/gr-qtgui/grc/qtgui_time_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_time_sink_x.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Time Sink</name>
   <key>qtgui_time_sink_x</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_vector_sink_f.xml 
b/gr-qtgui/grc/qtgui_vector_sink_f.xml.cmakein
similarity index 99%
rename from gr-qtgui/grc/qtgui_vector_sink_f.xml
rename to gr-qtgui/grc/qtgui_vector_sink_f.xml.cmakein
index 0f456323bf..8b928eb7ea 100644
--- a/gr-qtgui/grc/qtgui_vector_sink_f.xml
+++ b/gr-qtgui/grc/qtgui_vector_sink_f.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Vector Sink</name>
   <key>qtgui_vector_sink_f</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml 
b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml.cmakein
similarity index 99%
rename from gr-qtgui/grc/qtgui_waterfall_sink_x.xml
rename to gr-qtgui/grc/qtgui_waterfall_sink_x.xml.cmakein
index a684492246..d198ca084a 100644
--- a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
+++ b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml.cmakein
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Waterfall Sink</name>
   <key>qtgui_waterfall_sink_x</key>
-  <import>from PyQt5 import Qt</import>
+  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
-- 
2.11.0

++++++ qt5-maint-0010-gr-qtgui-Fix-range.py-to-work-with-both-Qt4-and-Qt5.patch 
++++++
>From 7df8c4ea6559ba211222e7d7cfb152f71dbc815b Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Tue, 21 Jun 2016 18:16:06 +0200
Subject: [PATCH 10/22] gr-qtgui: Fix range.py to work with both Qt4 and Qt5

Signed-off-by: Paul Cercueil <[email protected]>
---
 gr-qtgui/python/qtgui/CMakeLists.txt                 | 10 +++++++++-
 gr-qtgui/python/qtgui/{range.py => range.py.cmakein} |  2 +-
 2 files changed, 10 insertions(+), 2 deletions(-)
 rename gr-qtgui/python/qtgui/{range.py => range.py.cmakein} (99%)

diff --git a/gr-qtgui/python/qtgui/CMakeLists.txt 
b/gr-qtgui/python/qtgui/CMakeLists.txt
index 1c20033db2..7e2d0321c4 100644
--- a/gr-qtgui/python/qtgui/CMakeLists.txt
+++ b/gr-qtgui/python/qtgui/CMakeLists.txt
@@ -20,9 +20,17 @@
 ########################################################################
 include(GrPython)
 
+if (DESIRED_QT_VERSION MATCHES 4)
+       set(PY_QT_IMPORT "from PyQt4 import Qt, QtCore, QtGui as QtWidgets")
+else()
+       set(PY_QT_IMPORT "from PyQt5 import Qt, QtCore, QtWidgets")
+endif()
+
+configure_file(range.py.cmakein "${CMAKE_CURRENT_BINARY_DIR}/range.py" @ONLY)
+
 GR_PYTHON_INSTALL(
     FILES __init__.py
-          range.py
+          "${CMAKE_CURRENT_BINARY_DIR}/range.py"
           util.py
     DESTINATION ${GR_PYTHON_DIR}/gnuradio/qtgui
     COMPONENT "qtgui_python"
diff --git a/gr-qtgui/python/qtgui/range.py 
b/gr-qtgui/python/qtgui/range.py.cmakein
similarity index 99%
rename from gr-qtgui/python/qtgui/range.py
rename to gr-qtgui/python/qtgui/range.py.cmakein
index f972844114..9ed7706195 100755
--- a/gr-qtgui/python/qtgui/range.py
+++ b/gr-qtgui/python/qtgui/range.py.cmakein
@@ -21,7 +21,7 @@
 # Boston, MA 02110-1301, USA.
 #
 
-from PyQt5 import Qt, QtCore, QtWidgets
+@PY_QT_IMPORT@
 import util
 
 class Range(object):
-- 
2.11.0

++++++ qt5-maint-0011-gr-qtgui-Re-introduce-some-Qt4-specific-code.patch ++++++
>From 988c1520d5b6f763caa0164faef404185e7dbc85 Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Tue, 21 Jun 2016 18:30:21 +0200
Subject: [PATCH 11/22] gr-qtgui: Re-introduce some Qt4-specific code

Signed-off-by: Paul Cercueil <[email protected]>
---
 gr-qtgui/lib/const_sink_c_impl.cc       | 4 ++++
 gr-qtgui/lib/freq_sink_c_impl.cc        | 4 ++++
 gr-qtgui/lib/freq_sink_f_impl.cc        | 4 ++++
 gr-qtgui/lib/histogram_sink_f_impl.cc   | 4 ++++
 gr-qtgui/lib/sink_c_impl.cc             | 4 ++++
 gr-qtgui/lib/sink_f_impl.cc             | 4 ++++
 gr-qtgui/lib/time_raster_sink_b_impl.cc | 4 ++++
 gr-qtgui/lib/time_raster_sink_f_impl.cc | 4 ++++
 gr-qtgui/lib/time_sink_c_impl.cc        | 4 ++++
 gr-qtgui/lib/time_sink_f_impl.cc        | 4 ++++
 gr-qtgui/lib/vector_sink_f_impl.cc      | 4 ++++
 gr-qtgui/lib/waterfall_sink_c_impl.cc   | 4 ++++
 gr-qtgui/lib/waterfall_sink_f_impl.cc   | 4 ++++
 13 files changed, 52 insertions(+)

--- a/gr-qtgui/lib/const_sink_c_impl.cc
+++ b/gr-qtgui/lib/const_sink_c_impl.cc
@@ -127,6 +127,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/freq_sink_c_impl.cc
+++ b/gr-qtgui/lib/freq_sink_c_impl.cc
@@ -156,6 +156,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
         d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/freq_sink_f_impl.cc
+++ b/gr-qtgui/lib/freq_sink_f_impl.cc
@@ -155,6 +155,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/histogram_sink_f_impl.cc
+++ b/gr-qtgui/lib/histogram_sink_f_impl.cc
@@ -115,6 +115,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/sink_c_impl.cc
+++ b/gr-qtgui/lib/sink_c_impl.cc
@@ -131,6 +131,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/sink_f_impl.cc
+++ b/gr-qtgui/lib/sink_f_impl.cc
@@ -131,6 +131,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/time_raster_sink_b_impl.cc
+++ b/gr-qtgui/lib/time_raster_sink_b_impl.cc
@@ -130,6 +130,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/time_raster_sink_f_impl.cc
+++ b/gr-qtgui/lib/time_raster_sink_f_impl.cc
@@ -128,6 +128,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/time_sink_c_impl.cc
+++ b/gr-qtgui/lib/time_sink_c_impl.cc
@@ -134,6 +134,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/time_sink_f_impl.cc
+++ b/gr-qtgui/lib/time_sink_f_impl.cc
@@ -129,6 +129,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/vector_sink_f_impl.cc
+++ b/gr-qtgui/lib/vector_sink_f_impl.cc
@@ -140,6 +140,10 @@
         d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
         d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/waterfall_sink_c_impl.cc
+++ b/gr-qtgui/lib/waterfall_sink_c_impl.cc
@@ -159,6 +159,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
--- a/gr-qtgui/lib/waterfall_sink_f_impl.cc
+++ b/gr-qtgui/lib/waterfall_sink_f_impl.cc
@@ -155,6 +155,10 @@
        d_qApplication = qApp;
       }
       else {
+#if QT_VERSION >= 0x040500 && QT_VERSION < 0x050000
+        std::string style = prefs::singleton()->get_string("qtgui", "style", 
"raster");
+        QApplication::setGraphicsSystem(QString(style.c_str()));
+#endif
        d_qApplication = new QApplication(d_argc, &d_argv);
       }
 
++++++ qt5-maint-0012-grc-Fix-generation-of-Python-code-for-Qt4-and-Qt5.patch 
++++++
++++ 659 lines (skipped)

++++++ 
qt5-maint-0013-grc-replace-templated-xml-files-with-search-and-repl.patch ++++++
++++ 650 lines (skipped)

++++++ 
qt5-maint-0014-qtgui-replace-templated-xml-files-with-search-and-re.patch ++++++
>From d796f30a241ed29831d597ee27df01556a80d2f1 Mon Sep 17 00:00:00 2001
From: Sebastian Koslowski <[email protected]>
Date: Tue, 30 Aug 2016 17:52:09 +0200
Subject: [PATCH 14/22] qtgui: replace templated xml files with search and
 replace for qt4

---
 gr-qtgui/grc/CMakeLists.txt                        | 32 +++++++++++++++++-----
 ...ber_sink_b.xml.cmakein => qtgui_ber_sink_b.xml} |  2 +-
 ...block_tree.xml.cmakein => qtgui_block_tree.xml} |  0
 ...i_check_box.xml.cmakein => qtgui_check_box.xml} |  2 +-
 ...qtgui_chooser.xml.cmakein => qtgui_chooser.xml} |  4 +--
 ...t_sink_x.xml.cmakein => qtgui_const_sink_x.xml} |  2 +-
 ..._box_msg.xml.cmakein => qtgui_edit_box_msg.xml} |  2 +-
 .../{qtgui_entry.xml.cmakein => qtgui_entry.xml}   |  2 +-
 ...eq_sink_x.xml.cmakein => qtgui_freq_sink_x.xml} |  2 +-
 ...nk_x.xml.cmakein => qtgui_histogram_sink_x.xml} |  2 +-
 .../{qtgui_label.xml.cmakein => qtgui_label.xml}   |  2 +-
 ...mber_sink.xml.cmakein => qtgui_number_sink.xml} |  2 +-
 ...sh_button.xml.cmakein => qtgui_push_button.xml} |  2 +-
 .../{qtgui_range.xml.cmakein => qtgui_range.xml}   |  0
 .../{qtgui_sink_x.xml.cmakein => qtgui_sink_x.xml} |  2 +-
 ...tab_widget.xml.cmakein => qtgui_tab_widget.xml} |  2 +-
 ...aster_x.xml.cmakein => qtgui_time_raster_x.xml} |  2 +-
 ...me_sink_x.xml.cmakein => qtgui_time_sink_x.xml} |  2 +-
 ..._sink_f.xml.cmakein => qtgui_vector_sink_f.xml} |  2 +-
 ...nk_x.xml.cmakein => qtgui_waterfall_sink_x.xml} |  2 +-
 20 files changed, 43 insertions(+), 25 deletions(-)
 rename gr-qtgui/grc/{qtgui_ber_sink_b.xml.cmakein => qtgui_ber_sink_b.xml} 
(99%)
 rename gr-qtgui/grc/{qtgui_block_tree.xml.cmakein => qtgui_block_tree.xml} 
(100%)
 rename gr-qtgui/grc/{qtgui_check_box.xml.cmakein => qtgui_check_box.xml} (97%)
 rename gr-qtgui/grc/{qtgui_chooser.xml.cmakein => qtgui_chooser.xml} (98%)
 rename gr-qtgui/grc/{qtgui_const_sink_x.xml.cmakein => qtgui_const_sink_x.xml} 
(99%)
 rename gr-qtgui/grc/{qtgui_edit_box_msg.xml.cmakein => qtgui_edit_box_msg.xml} 
(98%)
 rename gr-qtgui/grc/{qtgui_entry.xml.cmakein => qtgui_entry.xml} (97%)
 rename gr-qtgui/grc/{qtgui_freq_sink_x.xml.cmakein => qtgui_freq_sink_x.xml} 
(99%)
 rename gr-qtgui/grc/{qtgui_histogram_sink_x.xml.cmakein => 
qtgui_histogram_sink_x.xml} (99%)
 rename gr-qtgui/grc/{qtgui_label.xml.cmakein => qtgui_label.xml} (97%)
 rename gr-qtgui/grc/{qtgui_number_sink.xml.cmakein => qtgui_number_sink.xml} 
(99%)
 rename gr-qtgui/grc/{qtgui_push_button.xml.cmakein => qtgui_push_button.xml} 
(97%)
 rename gr-qtgui/grc/{qtgui_range.xml.cmakein => qtgui_range.xml} (100%)
 rename gr-qtgui/grc/{qtgui_sink_x.xml.cmakein => qtgui_sink_x.xml} (98%)
 rename gr-qtgui/grc/{qtgui_tab_widget.xml.cmakein => qtgui_tab_widget.xml} 
(99%)
 rename gr-qtgui/grc/{qtgui_time_raster_x.xml.cmakein => 
qtgui_time_raster_x.xml} (99%)
 rename gr-qtgui/grc/{qtgui_time_sink_x.xml.cmakein => qtgui_time_sink_x.xml} 
(99%)
 rename gr-qtgui/grc/{qtgui_vector_sink_f.xml.cmakein => 
qtgui_vector_sink_f.xml} (99%)
 rename gr-qtgui/grc/{qtgui_waterfall_sink_x.xml.cmakein => 
qtgui_waterfall_sink_x.xml} (99%)

diff --git a/gr-qtgui/grc/CMakeLists.txt b/gr-qtgui/grc/CMakeLists.txt
index d01bcc52c4..74e6958639 100644
--- a/gr-qtgui/grc/CMakeLists.txt
+++ b/gr-qtgui/grc/CMakeLists.txt
@@ -18,12 +18,30 @@
 # Boston, MA 02110-1301, USA.
 
 ########################################################################
-file(GLOB xml_cmakein_files "*.xml.cmakein")
+file(GLOB xml_files "*.xml")
 
-foreach(xml_cmakein_file IN ITEMS ${xml_cmakein_files})
-       get_filename_component(FILE_NAME ${xml_cmakein_file} NAME_WE)
-       configure_file(${xml_cmakein_file} 
"${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.xml" @ONLY)
-       set(xml_files ${xml_files} 
"${CMAKE_CURRENT_BINARY_DIR}/${FILE_NAME}.xml")
-endforeach(xml_cmakein_file)
+macro(REPLACE_IN_FILE _xml_block match replace)
+    set(xml_block_src "${CMAKE_CURRENT_SOURCE_DIR}/${_xml_block}")
+    set(xml_block     "${CMAKE_CURRENT_BINARY_DIR}/${_xml_block}")
 
-install(FILES ${xml_files} DESTINATION ${GRC_BLOCKS_DIR} COMPONENT 
"qtgui_python")
+    list(REMOVE_ITEM xml_files "${xml_block_src}")
+    file(READ "${xml_block_src}" xml_block_src_text)
+    string(REPLACE "${match}" "${replace}"
+           xml_block_text "${xml_block_src_text}")
+    file(WRITE "${xml_block}" "${xml_block_text}")
+
+    list(APPEND generated_xml_files "${xml_block}")
+endmacro()
+
+
+if(DESIRED_QT_VERSION EQUAL 4)
+    foreach(xml_block_src ${xml_files})
+        get_filename_component(xml_block "${xml_block_src}" NAME)
+        REPLACE_IN_FILE("${xml_block}" "PyQt5" "PyQt4")
+    endforeach()
+endif()
+
+install(
+    FILES ${xml_files} ${generated_xml_files}
+    DESTINATION "${GRC_BLOCKS_DIR}"
+)
diff --git a/gr-qtgui/grc/qtgui_ber_sink_b.xml.cmakein 
b/gr-qtgui/grc/qtgui_ber_sink_b.xml
similarity index 99%
rename from gr-qtgui/grc/qtgui_ber_sink_b.xml.cmakein
rename to gr-qtgui/grc/qtgui_ber_sink_b.xml
index 91a87ce595..05a36dfbc0 100644
--- a/gr-qtgui/grc/qtgui_ber_sink_b.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_ber_sink_b.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Bercurve Sink</name>
   <key>qtgui_bercurve_sink</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <import>import numpy</import>
diff --git a/gr-qtgui/grc/qtgui_block_tree.xml.cmakein 
b/gr-qtgui/grc/qtgui_block_tree.xml
similarity index 100%
rename from gr-qtgui/grc/qtgui_block_tree.xml.cmakein
rename to gr-qtgui/grc/qtgui_block_tree.xml
diff --git a/gr-qtgui/grc/qtgui_check_box.xml.cmakein 
b/gr-qtgui/grc/qtgui_check_box.xml
similarity index 97%
rename from gr-qtgui/grc/qtgui_check_box.xml.cmakein
rename to gr-qtgui/grc/qtgui_check_box.xml
index 9edacb24d8..ccee59dd92 100644
--- a/gr-qtgui/grc/qtgui_check_box.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_check_box.xml
@@ -8,7 +8,7 @@
 <block>
        <name>QT GUI Check Box</name>
        <key>variable_qtgui_check_box</key>
-       <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+       <import>from PyQt5 import Qt</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#set $win = '_%s_check_box'%$id
 #if not $label()
diff --git a/gr-qtgui/grc/qtgui_chooser.xml.cmakein 
b/gr-qtgui/grc/qtgui_chooser.xml
similarity index 98%
rename from gr-qtgui/grc/qtgui_chooser.xml.cmakein
rename to gr-qtgui/grc/qtgui_chooser.xml
index 40c782bede..f79bb8ccb3 100644
--- a/gr-qtgui/grc/qtgui_chooser.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_chooser.xml
@@ -8,8 +8,8 @@
 <block>
        <name>QT GUI Chooser</name>
        <key>variable_qtgui_chooser</key>
-       <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
-       <import>from PyQt@[email protected] import QObject, 
pyqtSlot</import>
+       <import>from PyQt5 import Qt</import>
+       <import>from PyQt5.QtCore import QObject, pyqtSlot</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#slurp
 #set $all_options = [$option0, $option1, $option2, $option3, 
$option4][:int($num_opts())]
diff --git a/gr-qtgui/grc/qtgui_const_sink_x.xml.cmakein 
b/gr-qtgui/grc/qtgui_const_sink_x.xml
similarity index 99%
rename from gr-qtgui/grc/qtgui_const_sink_x.xml.cmakein
rename to gr-qtgui/grc/qtgui_const_sink_x.xml
index 6fa725acb1..10f82cce82 100644
--- a/gr-qtgui/grc/qtgui_const_sink_x.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_const_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Constellation Sink</name>
   <key>qtgui_const_sink_x</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_edit_box_msg.xml.cmakein 
b/gr-qtgui/grc/qtgui_edit_box_msg.xml
similarity index 98%
rename from gr-qtgui/grc/qtgui_edit_box_msg.xml.cmakein
rename to gr-qtgui/grc/qtgui_edit_box_msg.xml
index 75ff93349f..d77a4b3e1b 100644
--- a/gr-qtgui/grc/qtgui_edit_box_msg.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_edit_box_msg.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Message Edit Box</name>
   <key>qtgui_edit_box_msg</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_entry.xml.cmakein b/gr-qtgui/grc/qtgui_entry.xml
similarity index 97%
rename from gr-qtgui/grc/qtgui_entry.xml.cmakein
rename to gr-qtgui/grc/qtgui_entry.xml
index da61ee723a..fc0f4089d1 100644
--- a/gr-qtgui/grc/qtgui_entry.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_entry.xml
@@ -8,7 +8,7 @@
 <block>
        <name>QT GUI Entry</name>
        <key>variable_qtgui_entry</key>
-       <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+       <import>from PyQt5 import Qt</import>
        <import>from gnuradio import eng_notation</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#set $win = 'self._%s_tool_bar'%$id
diff --git a/gr-qtgui/grc/qtgui_freq_sink_x.xml.cmakein 
b/gr-qtgui/grc/qtgui_freq_sink_x.xml
similarity index 99%
rename from gr-qtgui/grc/qtgui_freq_sink_x.xml.cmakein
rename to gr-qtgui/grc/qtgui_freq_sink_x.xml
index aaf0d75271..ed39db7781 100644
--- a/gr-qtgui/grc/qtgui_freq_sink_x.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_freq_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Frequency Sink</name>
   <key>qtgui_freq_sink_x</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_histogram_sink_x.xml.cmakein 
b/gr-qtgui/grc/qtgui_histogram_sink_x.xml
similarity index 99%
rename from gr-qtgui/grc/qtgui_histogram_sink_x.xml.cmakein
rename to gr-qtgui/grc/qtgui_histogram_sink_x.xml
index d04a44da13..9e3dcb104f 100644
--- a/gr-qtgui/grc/qtgui_histogram_sink_x.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_histogram_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Histogram Sink</name>
   <key>qtgui_histogram_sink_x</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_label.xml.cmakein b/gr-qtgui/grc/qtgui_label.xml
similarity index 97%
rename from gr-qtgui/grc/qtgui_label.xml.cmakein
rename to gr-qtgui/grc/qtgui_label.xml
index c546e09dcc..946cee36ab 100644
--- a/gr-qtgui/grc/qtgui_label.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_label.xml
@@ -9,7 +9,7 @@
 <block>
   <name>QT GUI Label</name>
   <key>variable_qtgui_label</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import eng_notation</import>
   <var_make>self.$(id) = $(id) = $value</var_make>
   <make>#set $win = 'self._%s_tool_bar'%$id
diff --git a/gr-qtgui/grc/qtgui_number_sink.xml.cmakein 
b/gr-qtgui/grc/qtgui_number_sink.xml
similarity index 99%
rename from gr-qtgui/grc/qtgui_number_sink.xml.cmakein
rename to gr-qtgui/grc/qtgui_number_sink.xml
index d4b4c5808f..06837493c3 100644
--- a/gr-qtgui/grc/qtgui_number_sink.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_number_sink.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Number Sink</name>
   <key>qtgui_number_sink</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_push_button.xml.cmakein 
b/gr-qtgui/grc/qtgui_push_button.xml
similarity index 97%
rename from gr-qtgui/grc/qtgui_push_button.xml.cmakein
rename to gr-qtgui/grc/qtgui_push_button.xml
index d99f230acf..49c2e9d6f0 100644
--- a/gr-qtgui/grc/qtgui_push_button.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_push_button.xml
@@ -8,7 +8,7 @@
 <block>
        <name>QT GUI Push Button</name>
        <key>variable_qtgui_push_button</key>
-       <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+       <import>from PyQt5 import Qt</import>
        <var_make>self.$(id) = $(id) = $value</var_make>
        <make>#set $win = '_%s_push_button'%$id
 #if not $label()
diff --git a/gr-qtgui/grc/qtgui_range.xml.cmakein b/gr-qtgui/grc/qtgui_range.xml
similarity index 100%
rename from gr-qtgui/grc/qtgui_range.xml.cmakein
rename to gr-qtgui/grc/qtgui_range.xml
diff --git a/gr-qtgui/grc/qtgui_sink_x.xml.cmakein 
b/gr-qtgui/grc/qtgui_sink_x.xml
similarity index 98%
rename from gr-qtgui/grc/qtgui_sink_x.xml.cmakein
rename to gr-qtgui/grc/qtgui_sink_x.xml
index 1c75921a75..a9bc469cd2 100644
--- a/gr-qtgui/grc/qtgui_sink_x.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Sink</name>
   <key>qtgui_sink_x</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_tab_widget.xml.cmakein 
b/gr-qtgui/grc/qtgui_tab_widget.xml
similarity index 99%
rename from gr-qtgui/grc/qtgui_tab_widget.xml.cmakein
rename to gr-qtgui/grc/qtgui_tab_widget.xml
index f5a1a73cdc..805542cc8b 100644
--- a/gr-qtgui/grc/qtgui_tab_widget.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_tab_widget.xml
@@ -7,7 +7,7 @@
 <block>
        <name>QT GUI Tab Widget</name>
        <key>qtgui_tab_widget</key>
-       <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+       <import>from PyQt5 import Qt</import>
        <make>#set $win = 'self.%s'%$id
 Qt.QTabWidget()
 #set $all_labels = [$label0, $label1, $label2, $label3, $label4,
diff --git a/gr-qtgui/grc/qtgui_time_raster_x.xml.cmakein 
b/gr-qtgui/grc/qtgui_time_raster_x.xml
similarity index 99%
rename from gr-qtgui/grc/qtgui_time_raster_x.xml.cmakein
rename to gr-qtgui/grc/qtgui_time_raster_x.xml
index 94b7ef136a..d458f67eb9 100644
--- a/gr-qtgui/grc/qtgui_time_raster_x.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_time_raster_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Time Raster Sink</name>
   <key>qtgui_time_raster_sink_x</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_time_sink_x.xml.cmakein 
b/gr-qtgui/grc/qtgui_time_sink_x.xml
similarity index 99%
rename from gr-qtgui/grc/qtgui_time_sink_x.xml.cmakein
rename to gr-qtgui/grc/qtgui_time_sink_x.xml
index d239917907..d4347950ea 100644
--- a/gr-qtgui/grc/qtgui_time_sink_x.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_time_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Time Sink</name>
   <key>qtgui_time_sink_x</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
diff --git a/gr-qtgui/grc/qtgui_vector_sink_f.xml.cmakein 
b/gr-qtgui/grc/qtgui_vector_sink_f.xml
similarity index 99%
rename from gr-qtgui/grc/qtgui_vector_sink_f.xml.cmakein
rename to gr-qtgui/grc/qtgui_vector_sink_f.xml
index 8b928eb7ea..0f456323bf 100644
--- a/gr-qtgui/grc/qtgui_vector_sink_f.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_vector_sink_f.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Vector Sink</name>
   <key>qtgui_vector_sink_f</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>import sip</import>
   <make>#set $win = 'self._%s_win'%$id
diff --git a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml.cmakein 
b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
similarity index 99%
rename from gr-qtgui/grc/qtgui_waterfall_sink_x.xml.cmakein
rename to gr-qtgui/grc/qtgui_waterfall_sink_x.xml
index d198ca084a..a684492246 100644
--- a/gr-qtgui/grc/qtgui_waterfall_sink_x.xml.cmakein
+++ b/gr-qtgui/grc/qtgui_waterfall_sink_x.xml
@@ -7,7 +7,7 @@
 <block>
   <name>QT GUI Waterfall Sink</name>
   <key>qtgui_waterfall_sink_x</key>
-  <import>from PyQt@DESIRED_QT_VERSION@ import Qt</import>
+  <import>from PyQt5 import Qt</import>
   <import>from gnuradio import qtgui</import>
   <import>from gnuradio.filter import firdes</import>
   <import>import sip</import>
-- 
2.11.0

++++++ qt5-maint-0017-qtgui-fix-stylesheet-for-qt5.patch ++++++
>From ae10f7b4f1ec25fc2e800d42a061603a08c0283b Mon Sep 17 00:00:00 2001
From: Bastian Bloessl <[email protected]>
Date: Fri, 11 Nov 2016 13:27:55 +0100
Subject: [PATCH 17/22] qtgui: fix stylesheet for qt5

---
 gr-qtgui/python/qtgui/util.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gr-qtgui/python/qtgui/util.py b/gr-qtgui/python/qtgui/util.py
index d2e9495ac6..fffc482615 100644
--- a/gr-qtgui/python/qtgui/util.py
+++ b/gr-qtgui/python/qtgui/util.py
@@ -25,7 +25,7 @@ from PyQt4 import Qt, QtCore, QtGui
 from gnuradio import gr
 
 def check_set_qss():
-    app = QtGui.qApp
+    app = QtWidgets.qApp
     qssfile = gr.prefs().get_string("qtgui","qss","")
     if(len(qssfile)>0):
         try:
-- 
2.11.0

++++++ qt5-maint-0019-qtgui-fixed-apps-for-Qt5-compatibility.patch ++++++
++++ 2382 lines (skipped)

++++++ qt5-maint-0021-gnuradio-runtime-ctrlport-qt5.patch ++++++
>From b12439f3f600b9d0be03189e8a82310d9ceabdd6 Mon Sep 17 00:00:00 2001
From: "A. Maitland Bottoms" <[email protected]>
Date: Sun, 25 Feb 2018 13:27:38 -0500
Subject: [PATCH 21/22] gnuradio runtime ctrlport qt5

---
 gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py    | 4 ++--
 gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor | 4 ++--
 gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx    | 4 ++--
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py 
b/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
index c5bfd0a8cb..6d78565b3b 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/GrDataPlotter.py
@@ -28,10 +28,10 @@ import sys, time, struct
 
 try:
     from gnuradio import qtgui
-    from PyQt4 import QtGui, QtCore
+    from PyQt5 import QtGui, QtCore
     import sip
 except ImportError:
-    print "Error: Program requires PyQt4 and gr-qtgui."
+    sys.stderr.write("Error: Program requires PyQt5 and gr-qtgui.\n")
     sys.exit(1)
 
 class GrDataPlotParent(gr.top_block, QtGui.QWidget):
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor 
b/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
index c866776355..ce53c60c0e 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/gr-ctrlport-monitor
@@ -20,8 +20,8 @@
 # Boston, MA 02110-1301, USA.
 #
 
-from PyQt4 import QtCore,Qt
-import PyQt4.QtGui as QtGui
+from PyQt5 import QtCore,Qt
+import PyQt5.QtGui as QtGui
 import os, sys, time, struct
 
 from gnuradio import gr, ctrlport
diff --git a/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx 
b/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx
index 15a2153a0f..a9e43bff41 100644
--- a/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx
+++ b/gnuradio-runtime/python/gnuradio/ctrlport/gr-perf-monitorx
@@ -46,8 +46,8 @@ except ImportError:
        "Please check that they are installed and try again."
     sys.exit(1)
 
-from PyQt4 import QtCore,Qt
-import PyQt4.QtGui as QtGui
+from PyQt5 import QtCore,Qt
+import PyQt5.QtGui as QtGui
 import itertools
 
 from gnuradio import gr, ctrlport
-- 
2.11.0

++++++ qt5-maint-0022-gr-uhd-qt5.patch ++++++
>From 18f5edf38cc6a24836f943d6976d913a4f35cab3 Mon Sep 17 00:00:00 2001
From: "A. Maitland Bottoms" <[email protected]>
Date: Sun, 25 Feb 2018 13:28:05 -0500
Subject: [PATCH 22/22] gr uhd qt5

---
 gr-uhd/apps/uhd_fft        |  8 ++++----
 gr-uhd/apps/uhd_siggen_gui | 10 +++++-----
 2 files changed, 9 insertions(+), 9 deletions(-)

--- a/gr-uhd/apps/uhd_fft
+++ b/gr-uhd/apps/uhd_fft
@@ -40,7 +40,7 @@
 import threading
 import time
 from distutils.version import StrictVersion
-from PyQt4 import Qt
+from PyQt5 import Qt
 from gnuradio import eng_notation
 from gnuradio import eng_arg
 from gnuradio import gr
@@ -478,8 +478,8 @@
     Go, go, go!
     """
     args = setup_argparser().parse_args()
-    if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
-        
Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
+    #if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
+    #    
Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster'))
     qapp = Qt.QApplication(sys.argv)
     tb = uhd_fft(args)
     tb.start()
@@ -487,7 +487,7 @@
     def quitting():
         tb.stop()
         tb.wait()
-    qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
+    qapp.aboutToQuit.connect(quitting)
     qapp.exec_()
     tb = None #to clean up Qt widgets
 
--- a/gr-uhd/apps/uhd_siggen_gui
+++ b/gr-uhd/apps/uhd_siggen_gui
@@ -38,8 +38,8 @@
 import threading
 import time
 from distutils.version import StrictVersion
-from PyQt4 import Qt
-from PyQt4.QtCore import pyqtSlot
+from PyQt5 import Qt
+from PyQt5.QtCore import pyqtSlot
 from gnuradio import analog
 from gnuradio import eng_notation
 from gnuradio import gr
@@ -448,14 +448,14 @@
     """ Go, go, go! """
     parser = setup_parser()
     args = parser.parse_args()
-    if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
-        Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui', 
'style', 'raster'))
+    #if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"):
+    #    Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui', 
'style', 'raster'))
     qapp = Qt.QApplication(sys.argv)
     siggen_gui = uhd_siggen_gui(args)
     siggen_gui.show()
     def quitting():
         siggen_gui.stop()
-    qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
+    qapp.aboutToQuit.connect(quitting)
     qapp.exec_()
     siggen_gui = None #to clean up Qt widgets
 
++++++ qt5-maint-0023-gr-qtgui-util.patch ++++++
>From af4ab4e0f745ef3d61effc71824b09d0c15d8b86 Mon Sep 17 00:00:00 2001
From: "A. Maitland Bottoms" <[email protected]>
Date: Mon, 26 Feb 2018 21:36:29 -0500
Subject: [PATCH] gr qtgui util

---
 gr-qtgui/python/qtgui/util.py | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/gr-qtgui/python/qtgui/util.py b/gr-qtgui/python/qtgui/util.py
index fffc482615..ca9f6f5035 100644
--- a/gr-qtgui/python/qtgui/util.py
+++ b/gr-qtgui/python/qtgui/util.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 #
-# Copyright 2016 Free Software Foundation, Inc.
+# Copyright 2016,2018 Free Software Foundation, Inc.
 #
 # This file is part of GNU Radio
 #
@@ -21,7 +21,7 @@
 # Boston, MA 02110-1301, USA.
 #
 
-from PyQt4 import Qt, QtCore, QtGui
+from PyQt5 import Qt, QtCore, QtGui, QtWidgets
 from gnuradio import gr
 
 def check_set_qss():
@@ -32,4 +32,3 @@ def check_set_qss():
             app.setStyleSheet(open(qssfile).read())
         except:
             print "WARNING: bad QSS file, %s"%(qssfile)
-
-- 
2.11.0

++++++ qt5-maint-0024-gr-qtgui-restoreGeometry.patch ++++++
>From b65bf73bc174183d6aec476c2fb161a4911c2351 Mon Sep 17 00:00:00 2001
From: Vasil Velichkov <[email protected]>
Date: Thu, 11 Jan 2018 00:32:37 +0000
Subject: [PATCH 27/27] Fix AttributeError: 'NoneType' object has no attribute
 'toByteArray'

Debian Bug #886807
---
 gr-uhd/apps/uhd_fft                | 6 +++---
 gr-uhd/apps/uhd_siggen_gui         | 4 ++--
 grc/blocks/options.xml             | 2 +-
 grc/core/generator/flow_graph.tmpl | 2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)

--- a/gr-uhd/apps/uhd_fft
+++ b/gr-uhd/apps/uhd_fft
@@ -40,7 +40,7 @@
 import threading
 import time
 from distutils.version import StrictVersion
-from PyQt5 import Qt
+from PyQt5 import Qt, QtCore
 from gnuradio import eng_notation
 from gnuradio import eng_arg
 from gnuradio import gr
@@ -60,7 +60,7 @@
     """
     def __init__(self, args):
         gr.top_block.__init__(self, "UHD FFT")
-        Qt.QWidget.__init__(self)
+        Qt.QWidget.__init__(self, args=args)
         UHDApp.__init__(self, args=args, prefix="UHD FFT")
         ##################################################
         # Init QT App
@@ -82,7 +82,7 @@
         self.top_grid_layout = Qt.QGridLayout()
         self.top_layout.addLayout(self.top_grid_layout)
         self.settings = Qt.QSettings("GNU Radio", "uhd_fft")
-        self.restoreGeometry(self.settings.value("geometry").toByteArray())
+        self.restoreGeometry(self.settings.value("geometry", 
type=QtCore.QByteArray))
 
         ##################################################
         # Parameters
--- a/gr-uhd/apps/uhd_siggen_gui
+++ b/gr-uhd/apps/uhd_siggen_gui
@@ -39,7 +39,7 @@
 import time
 from distutils.version import StrictVersion
 from PyQt5 import Qt
-from PyQt5.QtCore import pyqtSlot
+from PyQt5.QtCore import pyqtSlot, QByteArray
 from gnuradio import analog
 from gnuradio import eng_notation
 from gnuradio import gr
@@ -85,7 +85,7 @@
         self.top_grid_layout = Qt.QGridLayout()
         self.top_layout.addLayout(self.top_grid_layout)
         self.settings = Qt.QSettings("GNU Radio", "uhd_siggen_gui")
-        self.restoreGeometry(self.settings.value("geometry").toByteArray())
+        self.restoreGeometry(self.settings.value("geometry", type=QByteArray))
 
         ##################################################
         # Widgets + Controls
--- a/grc/blocks/options.xml
+++ b/grc/blocks/options.xml
@@ -16,7 +16,7 @@
 import wx
 #end if
 #if $generate_options() == 'qt_gui'
-from PyQt5 import Qt
+from PyQt5 import Qt, QtCore
 import sys
 #end if
 #if $generate_options() == 'bokeh_gui'
--- a/grc/core/generator/flow_graph.tmpl
+++ b/grc/core/generator/flow_graph.tmpl
@@ -122,7 +122,7 @@
         self.top_layout.addLayout(self.top_grid_layout)
 
         self.settings = Qt.QSettings("GNU Radio", "$class_name")
-        self.restoreGeometry(self.settings.value("geometry"))
+        self.restoreGeometry(self.settings.value("geometry", 
type=QtCore.QByteArray))
 
 #elif $generate_options == 'bokeh_gui'
 

Reply via email to