diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/qtah-generator.cabal b/qtah-generator.cabal
--- a/qtah-generator.cabal
+++ b/qtah-generator.cabal
@@ -1,12 +1,12 @@
 name: qtah-generator
-version: 0.6.0
+version: 0.7.0
 synopsis: Generator for Qtah Qt bindings
 homepage: http://khumba.net/projects/qtah
 license: LGPL-3
 license-files: LICENSE.GPL, LICENSE.LGPL
 author: Bryan Gardiner <bog@khumba.net>
 maintainer: Bryan Gardiner <bog@khumba.net>
-copyright: Copyright 2015-2019 The Qtah Authors.
+copyright: Copyright 2015-2020 The Qtah Authors.
 category: Graphics
 build-type: Custom
 cabal-version: 1.20
@@ -42,7 +42,7 @@
     , containers >=0.5 && <0.7
     , directory >=1.2 && <1.4
     , filepath >=1.3 && <1.5
-    , hoppy-generator >=0.7 && <0.8
+    , hoppy-generator >=0.7.1 && <0.8
     , hoppy-std >=0.7 && <0.8
     , haskell-src >=1.0 && <1.1
     , mtl >=2.2.1 && <2.3
@@ -246,9 +246,12 @@
     , Graphics.UI.Qtah.Generator.Interface.Widgets.QLabel
     , Graphics.UI.Qtah.Generator.Interface.Widgets.QLayout
     , Graphics.UI.Qtah.Generator.Interface.Widgets.QLayoutItem
+    , Graphics.UI.Qtah.Generator.Interface.Widgets.QLCDNumber
     , Graphics.UI.Qtah.Generator.Interface.Widgets.QLineEdit
     , Graphics.UI.Qtah.Generator.Interface.Widgets.QListView
     , Graphics.UI.Qtah.Generator.Interface.Widgets.QMainWindow
+    , Graphics.UI.Qtah.Generator.Interface.Widgets.QMdiArea
+    , Graphics.UI.Qtah.Generator.Interface.Widgets.QMdiSubWindow
     , Graphics.UI.Qtah.Generator.Interface.Widgets.QMenu
     , Graphics.UI.Qtah.Generator.Interface.Widgets.QMenuBar
     , Graphics.UI.Qtah.Generator.Interface.Widgets.QMessageBox
diff --git a/qtah-listener-gen b/qtah-listener-gen
--- a/qtah-listener-gen
+++ b/qtah-listener-gen
@@ -2,7 +2,7 @@
 
 # This file is part of Qtah.
 #
-# Copyright 2015-2019 The Qtah Authors.
+# Copyright 2015-2020 The Qtah Authors.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Lesser General Public License as published by
@@ -94,6 +94,7 @@
     $fn PtrQAbstractButtonBool "QAbstractButton*|bool"
     $fn PtrQAbstractItemModel "QAbstractItemModel*"
     $fn PtrQAction "QAction*"
+    $fn PtrQMdiSubWindow "QMdiSubWindow*"
     $fn PtrQObject "QObject*"
     $fn PtrQTreeWidgetItem "QTreeWidgetItem*"
     $fn PtrQTreeWidgetItemInt "QTreeWidgetItem*|int"
@@ -127,6 +128,7 @@
     $fn ToolButtonStyle "Qt::ToolButtonStyle"
     $fn WindowModality "Qt::WindowModality"
     $fn WindowState "Qt::WindowState"
+    $fn WindowStatesWindowStates "Qt::WindowStates|Qt::WindowStates"
     $fn "" ""
 }
 
@@ -153,6 +155,7 @@
     sayHpp '#include <QDockWidget>'
     sayHpp '#include <QIcon>'
     sayHpp '#include <QItemSelection>'
+    sayHpp '#include <QMdiSubWindow>'
     sayHpp '#include <QMetaObject>'
     sayHpp '#include <QModelIndex>'
     sayHpp '#include <QObject>'
diff --git a/src/Graphics/UI/Qtah/Generator/Common.hs b/src/Graphics/UI/Qtah/Generator/Common.hs
--- a/src/Graphics/UI/Qtah/Generator/Common.hs
+++ b/src/Graphics/UI/Qtah/Generator/Common.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -15,6 +15,8 @@
 -- You should have received a copy of the GNU Lesser General Public License
 -- along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+{-# LANGUAGE CPP #-}
+
 -- | General routines.
 module Graphics.UI.Qtah.Generator.Common (
   splitOn,
@@ -24,10 +26,14 @@
   maybeFail,
   firstM,
   lowerFirst,
+  upperFirst,
   ) where
 
+#if !MIN_VERSION_base(4,13,0)
+import Control.Monad.Fail (MonadFail)
+#endif
 import Control.Monad.Trans.Maybe (MaybeT (MaybeT), runMaybeT)
-import Data.Char (toLower)
+import Data.Char (toLower, toUpper)
 import Data.Foldable (asum)
 import Data.List (findIndex)
 
@@ -61,7 +67,7 @@
 fromMaybeM = flip maybe return
 
 -- | @maybeFail s x = maybe (fail s) x@
-maybeFail :: Monad m => String -> Maybe a -> m a
+maybeFail :: MonadFail m => String -> Maybe a -> m a
 maybeFail = fromMaybeM . fail
 
 -- | Runs a list of monadic actions until one returns a 'Just' value, then
@@ -73,3 +79,8 @@
 lowerFirst :: String -> String
 lowerFirst "" = ""
 lowerFirst (c:cs) = toLower c : cs
+
+-- | Upper cases the first character of a string, if nonempty.
+upperFirst :: String -> String
+upperFirst "" = ""
+upperFirst (c:cs) = toUpper c : cs
diff --git a/src/Graphics/UI/Qtah/Generator/Config.hs b/src/Graphics/UI/Qtah/Generator/Config.hs
--- a/src/Graphics/UI/Qtah/Generator/Config.hs
+++ b/src/Graphics/UI/Qtah/Generator/Config.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Empty.hs b/src/Graphics/UI/Qtah/Generator/Empty.hs
--- a/src/Graphics/UI/Qtah/Generator/Empty.hs
+++ b/src/Graphics/UI/Qtah/Generator/Empty.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Enum.hs b/src/Graphics/UI/Qtah/Generator/Enum.hs
--- a/src/Graphics/UI/Qtah/Generator/Enum.hs
+++ b/src/Graphics/UI/Qtah/Generator/Enum.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -54,6 +54,7 @@
     , ""
     , "QT += core gui"
     , "greaterThan(QT_MAJOR_VERSION, 4): QT += widgets"
+    , "CONFIG += cmdline"
     , "TARGET = qtahenum"
     , "SOURCES += " ++ sourceFile
     ]
diff --git a/src/Graphics/UI/Qtah/Generator/Flags.hs b/src/Graphics/UI/Qtah/Generator/Flags.hs
--- a/src/Graphics/UI/Qtah/Generator/Flags.hs
+++ b/src/Graphics/UI/Qtah/Generator/Flags.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractAnimation.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractAnimation.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractAnimation.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractAnimation.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -52,15 +52,15 @@
 aModule =
   AQtModule $
   makeQtModuleWithMinVersion ["Core", "QAbstractAnimation"] [4, 6] $
-  qtExport c_QAbstractAnimation :
-  map QtExportSignal signals ++
+  QtExportClassAndSignals c_QAbstractAnimation signals :
   collect
   [ just $ qtExport e_DeletionPolicy
   , just $ qtExport e_Direction
   , just $ qtExport e_State
   ]
 
-c_QAbstractAnimation =
+(c_QAbstractAnimation, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [ includeStd "QAbstractAnimation" ] $
   classSetEntityPrefix "" $
   makeClass (ident "QAbstractAnimation") Nothing [c_QObject] $
@@ -79,13 +79,13 @@
     -- TODO
   ]
 
-signals :: [Signal]
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ just $ makeSignal c_QAbstractAnimation "currentLoopChanged" listenerInt
-  , just $ makeSignal c_QAbstractAnimation "directionChanged" listenerDirection
-  , just $ makeSignal c_QAbstractAnimation "finished" listener
-  , just $ makeSignal c_QAbstractAnimation "stateChanged" listenerStateState
+  [ just $ makeSignal "currentLoopChanged" listenerInt
+  , just $ makeSignal "directionChanged" listenerDirection
+  , just $ makeSignal "finished" listener
+  , just $ makeSignal "stateChanged" listenerStateState
   ]
 
 e_DeletionPolicy =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractItemModel.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractItemModel.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractItemModel.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractItemModel.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -76,8 +76,7 @@
 aModule =
   AQtModule $
   makeQtModule ["Core", "QAbstractItemModel"] $
-  qtExport c_QAbstractItemModel :
-  map QtExportSignal signals ++
+  QtExportClassAndSignals c_QAbstractItemModel signals :
   collect
   [ just $ qtExport e_LayoutChangeHint
   , test (qtVersion >= [5, 11]) $ qtExport e_CheckIndexOption
@@ -85,7 +84,8 @@
   ]
 
 
-c_QAbstractItemModel =
+(c_QAbstractItemModel, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QAbstractItemModel"] $
   classSetEntityPrefix "" $
   makeClass (ident "QAbstractItemModel") Nothing [c_QObject] $
@@ -162,30 +162,31 @@
   , test (qtVersion >= [4, 2]) $ mkConstMethod "supportedDropActions" np $ flagsT fl_DropActions
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ just $ makeSignal c_QAbstractItemModel "columnsAboutToBeInserted" listenerQModelIndexIntInt
-  , test (qtVersion >= [4, 6]) $ makeSignal c_QAbstractItemModel "columnsAboutToBeMoved"
+  [ just $ makeSignalPrivate "columnsAboutToBeInserted" listenerQModelIndexIntInt
+  , test (qtVersion >= [4, 6]) $ makeSignalPrivate "columnsAboutToBeMoved"
     listenerQModelIndexIntIntQModelIndexInt
-  , just $ makeSignal c_QAbstractItemModel "columnsAboutToBeRemoved" listenerQModelIndexIntInt
-  , just $ makeSignal c_QAbstractItemModel "columnsInserted" listenerQModelIndexIntInt
-  , test (qtVersion >= [4, 6]) $ makeSignal c_QAbstractItemModel "columnsMoved"
+  , just $ makeSignalPrivate "columnsAboutToBeRemoved" listenerQModelIndexIntInt
+  , just $ makeSignalPrivate "columnsInserted" listenerQModelIndexIntInt
+  , test (qtVersion >= [4, 6]) $ makeSignalPrivate "columnsMoved"
     listenerQModelIndexIntIntQModelIndexInt
-  , just $ makeSignal c_QAbstractItemModel "columnsRemoved" listenerQModelIndexIntInt
-  , just $ makeSignal c_QAbstractItemModel "dataChanged" listenerQModelIndexQModelIndexQVectorInt
-  , just $ makeSignal c_QAbstractItemModel "headerDataChanged" listenerOrientationIntInt
+  , just $ makeSignalPrivate "columnsRemoved" listenerQModelIndexIntInt
+  , just $ makeSignal "dataChanged" listenerQModelIndexQModelIndexQVectorInt
+  , just $ makeSignal "headerDataChanged" listenerOrientationIntInt
     -- TODO layoutAboutToBeChanged (>=5.0)
     -- TODO layoutChanged (>=5.0)
-  , test (qtVersion >= [4, 2]) $ makeSignal c_QAbstractItemModel "modelAboutToBeReset" listener
-  , test (qtVersion >= [4, 1]) $ makeSignal c_QAbstractItemModel "modelReset" listener
-  , just $ makeSignal c_QAbstractItemModel "rowsAboutToBeInserted" listenerQModelIndexIntInt
-  , test (qtVersion >= [4, 6]) $ makeSignal c_QAbstractItemModel "rowsAboutToBeMoved"
+  , test (qtVersion >= [4, 2]) $ makeSignalPrivate "modelAboutToBeReset" listener
+  , test (qtVersion >= [4, 1]) $ makeSignalPrivate "modelReset" listener
+  , just $ makeSignalPrivate "rowsAboutToBeInserted" listenerQModelIndexIntInt
+  , test (qtVersion >= [4, 6]) $ makeSignalPrivate "rowsAboutToBeMoved"
     listenerQModelIndexIntIntQModelIndexInt
-  , just $ makeSignal c_QAbstractItemModel "rowsAboutToBeRemoved" listenerQModelIndexIntInt
-  , just $ makeSignal c_QAbstractItemModel "rowsInserted" listenerQModelIndexIntInt
-  , test (qtVersion >= [4, 6]) $ makeSignal c_QAbstractItemModel "rowsMoved"
+  , just $ makeSignalPrivate "rowsAboutToBeRemoved" listenerQModelIndexIntInt
+  , just $ makeSignalPrivate "rowsInserted" listenerQModelIndexIntInt
+  , test (qtVersion >= [4, 6]) $ makeSignalPrivate "rowsMoved"
     listenerQModelIndexIntIntQModelIndexInt
-  , just $ makeSignal c_QAbstractItemModel "rowsRemoved" listenerQModelIndexIntInt
+  , just $ makeSignalPrivate "rowsRemoved" listenerQModelIndexIntInt
   ]
 
 e_LayoutChangeHint =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractItemModel.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractItemModel.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractItemModel.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractItemModel.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractListModel.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractListModel.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractListModel.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractListModel.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractTableModel.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractTableModel.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractTableModel.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAbstractTableModel.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAnimationGroup.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAnimationGroup.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QAnimationGroup.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QAnimationGroup.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QBuffer.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QBuffer.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QBuffer.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QBuffer.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QByteArray.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QByteArray.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QByteArray.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QByteArray.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QChar.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QChar.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QChar.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QChar.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -20,6 +20,7 @@
   c_QChar,
   ) where
 
+import Control.Monad (guard)
 import Foreign.Hoppy.Generator.Language.Haskell (
   addImports,
   sayLn,
@@ -332,7 +333,7 @@
   ]
 
 e_Script =
-    makeQtEnum (ident1 "QChar" "Script") [includeStd "QChar"]
+    makeQtEnum (ident1 "QChar" "Script") [includeStd "QChar"] $
     [ "Script_Unknown"
     , "Script_Inherited"
     , "Script_Common"
@@ -459,20 +460,24 @@
     , "Script_Khudawadi"
     , "Script_Tirhuta"
     , "Script_WarangCiti"
-    , "Script_Ahom"
-    , "Script_AnatolianHieroglyphs"
-    , "Script_Hatran"
-    , "Script_Multani"
-    , "Script_OldHungarian"
-    , "Script_SignWriting"
-    , "Script_Adlam"
-    , "Script_Bhaiksuki"
-    , "Script_Marchen"
-    , "Script_Newa"
-    , "Script_Osage"
-    , "Script_Tangut"
-    , "Script_MasaramGondi"
-    , "Script_Nushu"
-    , "Script_Soyombo"
-    , "Script_ZanabazarSquare"
-    ]
+    ] ++
+    (guard (qtVersion >= [5, 6]) *>
+      [ "Script_Ahom"
+      , "Script_AnatolianHieroglyphs"
+      , "Script_Hatran"
+      , "Script_Multani"
+      , "Script_OldHungarian"
+      , "Script_SignWriting"
+      ]) ++
+    (guard (qtVersion >= [5, 11]) *>
+      [ "Script_Adlam"
+      , "Script_Bhaiksuki"
+      , "Script_Marchen"
+      , "Script_Newa"
+      , "Script_Osage"
+      , "Script_Tangut"
+      , "Script_MasaramGondi"
+      , "Script_Nushu"
+      , "Script_Soyombo"
+      , "Script_ZanabazarSquare"
+      ])
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QChildEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QChildEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QChildEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QChildEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QCoreApplication.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QCoreApplication.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QCoreApplication.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QCoreApplication.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QCryptographicHash.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QCryptographicHash.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QCryptographicHash.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QCryptographicHash.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDate.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDate.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDate.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDate.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2018-2019 The Qtah Authors.
+-- Copyright 2018-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDateTime.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDateTime.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDateTime.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDateTime.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDateTime.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDateTime.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDateTime.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDateTime.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDebug.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDebug.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDebug.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDebug.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDebugStateSaver.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDebugStateSaver.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDebugStateSaver.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDebugStateSaver.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDir.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDir.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDir.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDir.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDirIterator.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDirIterator.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QDirIterator.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QDirIterator.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QFile.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QFile.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QFile.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QFile.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileDevice.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileDevice.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileDevice.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileDevice.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileInfo.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileInfo.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileInfo.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileInfo.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileSelector.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileSelector.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileSelector.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileSelector.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileSystemWatcher.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileSystemWatcher.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileSystemWatcher.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QFileSystemWatcher.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -45,10 +45,10 @@
 aModule =
   AQtModule $
   makeQtModuleWithMinVersion ["Core", "QFileSystemWatcher"] [4, 2] $
-  (qtExport c_QFileSystemWatcher) :
-  map QtExportSignal signals
+  [ QtExportClassAndSignals c_QFileSystemWatcher signals ]
 
-c_QFileSystemWatcher =
+(c_QFileSystemWatcher, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [ includeStd "QFileSystemWatcher" ] $
   classSetEntityPrefix "" $
   makeClass (ident "QFileSystemWatcher") Nothing [c_QObject] $
@@ -65,9 +65,9 @@
   , just $ mkMethod "removePaths" [refT $ constT $ objT c_QStringList] $ objT c_QStringList
   ]
 
-signals :: [Signal]
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ just $ makeSignal c_QFileSystemWatcher "directoryChanged" listenerQString
-  , just $ makeSignal c_QFileSystemWatcher "fileChanged" listenerQString
+  [ just $ makeSignalPrivate "directoryChanged" listenerQString
+  , just $ makeSignalPrivate "fileChanged" listenerQString
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QIODevice.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QIODevice.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QIODevice.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QIODevice.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -22,6 +22,7 @@
   fl_OpenMode,
   ) where
 
+import Control.Monad (guard)
 import Foreign.Hoppy.Generator.Spec (
   addReqIncludes,
   classSetEntityPrefix,
@@ -51,13 +52,13 @@
 aModule =
   AQtModule $
   makeQtModule ["Core", "QIODevice"] $
-  qtExport c_QIODevice :
-  map QtExportSignal signals ++
-  [ qtExport e_OpenModeFlag
+  [ QtExportClassAndSignals c_QIODevice signals
+  , qtExport e_OpenModeFlag
   , qtExport fl_OpenMode
   ]
 
-c_QIODevice =
+(c_QIODevice, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [ includeStd "QIODevice" ] $
   classSetEntityPrefix "" $
   makeClass (ident "QIODevice") Nothing [c_QObject] $
@@ -119,16 +120,19 @@
   , "Truncate"
   , "Text"
   , "Unbuffered"
-  , "NewOnly"
-  , "ExistingOnly"
-  ]
+  ] ++
+  (guard (qtVersion >= [5, 11]) *>
+    [ "NewOnly"
+    , "ExistingOnly"
+    ])
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect $
-  [ just $ makeSignal c_QIODevice "aboutToClose" listener
-  , just $ makeSignal c_QIODevice "bytesWritten" listenerQlonglong
-  , test (qtVersion >= [5, 7]) $ makeSignal c_QIODevice "channelBytesWritten" listenerIntQlonglong
-  , test (qtVersion >= [5, 7]) $ makeSignal c_QIODevice "channelReadyRead" listenerInt
-  , test (qtVersion >= [4, 4]) $ makeSignal c_QIODevice "readChannelFinished" listener
-  , just $ makeSignal c_QIODevice "readyRead" listener
+  [ just $ makeSignal "aboutToClose" listener
+  , just $ makeSignal "bytesWritten" listenerQlonglong
+  , test (qtVersion >= [5, 7]) $ makeSignal "channelBytesWritten" listenerIntQlonglong
+  , test (qtVersion >= [5, 7]) $ makeSignal "channelReadyRead" listenerInt
+  , test (qtVersion >= [4, 4]) $ makeSignal "readChannelFinished" listener
+  , just $ makeSignal "readyRead" listener
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelection.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelection.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelection.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelection.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionModel.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionModel.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionModel.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionModel.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -64,13 +64,13 @@
 aModule =
   AQtModule $
   makeQtModule ["Core", "QItemSelectionModel"] $
-  [ qtExport c_QItemSelectionModel ] ++
-  map QtExportSignal signals ++
-  [ qtExport e_SelectionFlag
+  [ QtExportClassAndSignals c_QItemSelectionModel signals
+  , qtExport e_SelectionFlag
   , qtExport fl_SelectionFlags
   ]
 
-c_QItemSelectionModel =
+(c_QItemSelectionModel, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QItemSelectionModel"] $
   classSetEntityPrefix "" $
   makeClass (ident "QItemSelectionModel") Nothing [c_QObject] $
@@ -112,15 +112,14 @@
   , test (qtVersion >= [5, 5]) $ mkMethod "setModel" [ptrT $ objT c_QAbstractItemModel] voidT
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ just $ makeSignal c_QItemSelectionModel "currentChanged" listenerQModelIndexQModelIndex
-  , just $ makeSignal c_QItemSelectionModel "currentColumnChanged" listenerQModelIndexQModelIndex
-  , just $ makeSignal c_QItemSelectionModel "currentRowChanged" listenerQModelIndexQModelIndex
-  , test (qtVersion >= [5, 5]) $ makeSignal c_QItemSelectionModel "modelChanged"
-    listenerPtrQAbstractItemModel
-  , just $ makeSignal c_QItemSelectionModel "selectionChanged"
-    listenerRefConstQItemSelectionRefConstQItemSelection
+  [ just $ makeSignal "currentChanged" listenerQModelIndexQModelIndex
+  , just $ makeSignal "currentColumnChanged" listenerQModelIndexQModelIndex
+  , just $ makeSignal "currentRowChanged" listenerQModelIndexQModelIndex
+  , test (qtVersion >= [5, 5]) $ makeSignal "modelChanged" listenerPtrQAbstractItemModel
+  , just $ makeSignal "selectionChanged" listenerRefConstQItemSelectionRefConstQItemSelection
   ]
 
 (e_SelectionFlag, fl_SelectionFlags) =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionModel.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionModel.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionModel.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionModel.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionRange.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionRange.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionRange.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QItemSelectionRange.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLatin1Char.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLatin1Char.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLatin1Char.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLatin1Char.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLatin1String.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLatin1String.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLatin1String.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLatin1String.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLibrary.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLibrary.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLibrary.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLibrary.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLibraryInfo.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLibraryInfo.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLibraryInfo.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLibraryInfo.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QList.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QList.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QList.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QList.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QList.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QList.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QList.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QList.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLockFile.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLockFile.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLockFile.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLockFile.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLoggingCategory.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLoggingCategory.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QLoggingCategory.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QLoggingCategory.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMargins.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMargins.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMargins.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMargins.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMarginsF.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMarginsF.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMarginsF.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMarginsF.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageAuthenticationCode.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageAuthenticationCode.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageAuthenticationCode.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageAuthenticationCode.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageLogContext.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageLogContext.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageLogContext.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageLogContext.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageLogger.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageLogger.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageLogger.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMessageLogger.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaClassInfo.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaClassInfo.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaClassInfo.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaClassInfo.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaEnum.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaEnum.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaEnum.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaEnum.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaMethod.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaMethod.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaMethod.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaMethod.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaObject.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaObject.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaObject.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaObject.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaObject/Connection.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaObject/Connection.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaObject/Connection.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaObject/Connection.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaProperty.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaProperty.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaProperty.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaProperty.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaProperty.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaProperty.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaProperty.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QMetaProperty.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QModelIndex.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QModelIndex.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QModelIndex.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QModelIndex.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QObject.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QObject.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QObject.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QObject.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -68,10 +68,10 @@
 aModule =
   AQtModule $
   makeQtModule ["Core", "QObject"] $
-  (qtExport c_QObject) :
-  map QtExportSignal signals
+  [ QtExportClassAndSignals c_QObject signals ]
 
-c_QObject =
+(c_QObject, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [ includeStd "QObject"
                  , includeLocal "wrap_qobject.hpp"
                  ] $
@@ -134,7 +134,8 @@
   , just $ mkConstMethod "thread" np $ ptrT $ objT c_QThread
   ]
 
-signals =
-  [ makeSignal c_QObject "destroyed" listenerPtrQObject
-  , makeSignal c_QObject "objectNameChanged" listenerQString
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "destroyed" listenerPtrQObject
+  , makeSignalPrivate "objectNameChanged" listenerQString
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QObject.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QObject.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QObject.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QObject.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QOperatingSystemVersion.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QOperatingSystemVersion.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QOperatingSystemVersion.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QOperatingSystemVersion.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPair.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPair.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPair.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPair.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPalette.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPalette.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPalette.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPalette.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QParallelAnimationGroup.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QParallelAnimationGroup.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QParallelAnimationGroup.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QParallelAnimationGroup.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPauseAnimation.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPauseAnimation.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPauseAnimation.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPauseAnimation.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPersistentModelIndex.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPersistentModelIndex.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPersistentModelIndex.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPersistentModelIndex.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPluginLoader.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPluginLoader.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPluginLoader.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPluginLoader.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPoint.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPoint.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPoint.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPoint.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPointF.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPointF.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPointF.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPointF.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcess.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcess.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcess.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcess.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -66,9 +66,8 @@
 aModule =
   AQtModule $
   makeQtModule ["Core", "QProcess"] $
-  qtExport c_QProcess :
-  map QtExportSignal signals ++
-  [ qtExport e_ExitStatus
+  [ QtExportClassAndSignals c_QProcess signals
+  , qtExport e_ExitStatus
   , qtExport e_InputChannelMode
   , qtExport e_ProcessChannel
   , qtExport e_ProcessChannelMode
@@ -76,7 +75,8 @@
   , qtExport e_ProcessState
   ]
 
-c_QProcess =
+(c_QProcess, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QProcess"] $
   classSetEntityPrefix "" $
   makeClass (ident "QProcess") Nothing [c_QIODevice] $
@@ -197,12 +197,13 @@
   , "Running"
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect $
-  [ test (qtVersion >= [5, 6]) $ makeSignal c_QProcess "errorOccurred" listenerProcessError
-  , just $ makeSignal c_QProcess "finished" listenerIntExitStatus
-  , just $ makeSignal c_QProcess "readyReadStandardError" listener
-  , just $ makeSignal c_QProcess "readyReadStandardOutput" listener
-  , just $ makeSignal c_QProcess "started" listener
-  , just $ makeSignal c_QProcess "stateChanged" listenerProcessState
+  [ test (qtVersion >= [5, 6]) $ makeSignal "errorOccurred" listenerProcessError
+  , just $ makeSignal "finished" listenerIntExitStatus
+  , just $ makeSignalPrivate "readyReadStandardError" listener
+  , just $ makeSignalPrivate "readyReadStandardOutput" listener
+  , just $ makeSignalPrivate "started" listener
+  , just $ makeSignalPrivate "stateChanged" listenerProcessState
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcess.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcess.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcess.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcess.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcessEnvironment.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcessEnvironment.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcessEnvironment.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QProcessEnvironment.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPropertyAnimation.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPropertyAnimation.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QPropertyAnimation.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QPropertyAnimation.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QRandomGenerator.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QRandomGenerator.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QRandomGenerator.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QRandomGenerator.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QRandomGenerator64.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QRandomGenerator64.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QRandomGenerator64.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QRandomGenerator64.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QRect.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QRect.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QRect.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QRect.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QRectF.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QRectF.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QRectF.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QRectF.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QResource.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QResource.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QResource.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QResource.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSaveFile.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSaveFile.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSaveFile.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSaveFile.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSequentialAnimationGroup.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSequentialAnimationGroup.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSequentialAnimationGroup.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSequentialAnimationGroup.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -43,11 +43,11 @@
 
 aModule =
   AQtModule $
-  makeQtModuleWithMinVersion ["Core", "QSequentialAnimationGroup"] [4, 6] $
-  (qtExport c_QSequentialAnimationGroup) :
-  map QtExportSignal signals
+  makeQtModuleWithMinVersion ["Core", "QSequentialAnimationGroup"] [4, 6]
+  [ QtExportClassAndSignals c_QSequentialAnimationGroup signals ]
 
-c_QSequentialAnimationGroup =
+(c_QSequentialAnimationGroup, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [ includeStd "QSequentialAnimationGroup" ] $
   classSetEntityPrefix "" $
   makeClass (ident "QSequentialAnimationGroup") Nothing [c_QAnimationGroup] $
@@ -57,8 +57,8 @@
   , just $ mkConstMethod "currentAnimation" np $ ptrT $ objT c_QAbstractAnimation
   ]
 
-signals :: [Signal]
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ just $ makeSignal c_QSequentialAnimationGroup "currentAnimationChanged" listenerQAbstractAnimation
+  [ just $ makeSignal "currentAnimationChanged" listenerQAbstractAnimation
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSettings.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSettings.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSettings.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSettings.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2018-2019 The Qtah Authors.
+-- Copyright 2018-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSize.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSize.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSize.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSize.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSizeF.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSizeF.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSizeF.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSizeF.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QStandardPaths.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QStandardPaths.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QStandardPaths.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QStandardPaths.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QStaticPlugin.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QStaticPlugin.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QStaticPlugin.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QStaticPlugin.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QString.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QString.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QString.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QString.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QString.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QString.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QString.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QString.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QStringList.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QStringList.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QStringList.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QStringList.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QStringListModel.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QStringListModel.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QStringListModel.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QStringListModel.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSysInfo.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSysInfo.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QSysInfo.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QSysInfo.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextCodec.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextCodec.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextCodec.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextCodec.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextDecoder.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextDecoder.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextDecoder.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextDecoder.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextEncoder.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextEncoder.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextEncoder.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTextEncoder.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QThread.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QThread.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QThread.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QThread.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -47,13 +47,13 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Core", "QThread"] $
-  qtExport c_QThread :
-  map QtExportSignal signals ++
-  [ qtExport e_Priority
+  makeQtModule ["Core", "QThread"]
+  [ QtExportClassAndSignals c_QThread signals
+  , qtExport e_Priority
   ]
 
-c_QThread =
+(c_QThread, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QThread"] $
   classSetEntityPrefix "" $
   makeClass (ident "QThread") Nothing [c_QObject] $
@@ -87,9 +87,10 @@
   , just $ mkStaticMethod "yieldCurrentThread" np voidT
   ]
 
-signals =
-  [ makeSignal c_QThread "finished" listener
-  , makeSignal c_QThread "started" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignalPrivate "finished" listener
+  , makeSignalPrivate "started" listener
   ]
 
 e_Priority =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QThread.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QThread.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QThread.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QThread.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTime.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTime.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTime.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTime.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimeZone.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimeZone.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimeZone.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimeZone.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimer.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimer.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimer.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimer.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -44,11 +44,11 @@
 aModule =
   AQtModule $
   makeQtModule ["Core", "QTimer"]
-  [ qtExport c_QTimer
-  , QtExportSignal s_timeout
+  [ QtExportClassAndSignals c_QTimer signals
   ]
 
-c_QTimer =
+(c_QTimer, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QTimer"] $
   classSetEntityPrefix "" $
   makeClass (ident "QTimer") Nothing [c_QObject] $
@@ -69,4 +69,7 @@
   -- , just $ mkConstMethod "timerType" np $ objT c_Qt::TimerType
   ]
 
-s_timeout = makeSignal c_QTimer "timeout" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignalPrivate "timeout" listener
+  ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimerEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimerEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimerEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTimerEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTranslator.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTranslator.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QTranslator.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QTranslator.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariant.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariant.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariant.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariant.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariant.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariant.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariant.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariant.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariantAnimation.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariantAnimation.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariantAnimation.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVariantAnimation.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -43,11 +43,11 @@
 
 aModule =
   AQtModule $
-  makeQtModuleWithMinVersion ["Core", "QVariantAnimation"] [4, 6] $
-  (qtExport c_QVariantAnimation) :
-  map QtExportSignal signals
+  makeQtModuleWithMinVersion ["Core", "QVariantAnimation"] [4, 6]
+  [ QtExportClassAndSignals c_QVariantAnimation signals ]
 
-c_QVariantAnimation =
+(c_QVariantAnimation, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [ includeStd "QVariantAnimation" ] $
   classSetEntityPrefix "" $
   makeClass (ident "QVariantAnimation") Nothing [c_QAbstractAnimation] $
@@ -61,8 +61,8 @@
     -- TODO Other methods.
   ]
 
-signals :: [Signal]
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ just $ makeSignal c_QVariantAnimation "valueChanged" listenerRefConstQVariant
+  [ just $ makeSignal "valueChanged" listenerRefConstQVariant
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVector.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVector.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVector.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVector.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVector.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVector.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVector.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVector.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVersionNumber.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVersionNumber.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QVersionNumber.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QVersionNumber.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamAttribute.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamAttribute.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamAttribute.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamAttribute.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamAttributes.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamAttributes.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamAttributes.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamAttributes.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamEntityDeclaration.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamEntityDeclaration.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamEntityDeclaration.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamEntityDeclaration.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamEntityResolver.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamEntityResolver.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamEntityResolver.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamEntityResolver.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamNamespaceDeclaration.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamNamespaceDeclaration.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamNamespaceDeclaration.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamNamespaceDeclaration.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamNotationDeclaration.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamNotationDeclaration.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamNotationDeclaration.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamNotationDeclaration.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamReader.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamReader.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamReader.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamReader.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamWriter.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamWriter.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamWriter.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/QXmlStreamWriter.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Core/Types.hs b/src/Graphics/UI/Qtah/Generator/Interface/Core/Types.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Core/Types.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Core/Types.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -1508,7 +1508,7 @@
   ]
 
 e_WidgetAttribute =
-  makeQtEnum (ident1 "Qt" "WidgetAttribute") qtInclude
+  makeQtEnum (ident1 "Qt" "WidgetAttribute") qtInclude $
   [ "WA_AcceptDrops"
   , "WA_AlwaysShowToolTips"
   , "WA_ContentsPropagated"
@@ -1560,7 +1560,6 @@
   , "WA_ShowModal"
   , "WA_StaticContents"
   , "WA_StyleSheet"
-  , "WA_StyleSheetTarget"
   , "WA_TabletTracking"
   , "WA_TranslucentBackground"
   , "WA_UnderMouse"
@@ -1592,7 +1591,8 @@
   , "WA_X11DoNotAcceptFocus"
   , "WA_AlwaysStackOnTop"
   , "WA_ContentsMarginsRespectsSafeArea"
-  ]
+  ] ++
+  ["WA_StyleSheetTarget" | qtVersion >= [5, 12]]
 
 e_WindowFrameSection =
   makeQtEnum (ident1 "Qt" "WindowFrameSection") qtInclude
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QActionEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QActionEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QActionEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QActionEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBackingStore.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBackingStore.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBackingStore.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBackingStore.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBitmap.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBitmap.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBitmap.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBitmap.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBitmap.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBitmap.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBitmap.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBitmap.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBrush.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBrush.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBrush.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QBrush.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QClipboard.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QClipboard.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QClipboard.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QClipboard.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -53,11 +53,12 @@
 aModule =
   AQtModule $
   makeQtModule ["Gui", "QClipboard"] $
-  (qtExport c_QClipboard) :
-  map QtExportSignal signals ++
-  [ qtExport e_Mode ]
+  [ QtExportClassAndSignals c_QClipboard signals
+  , qtExport e_Mode
+  ]
 
-c_QClipboard =
+(c_QClipboard, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QClipboard"] $
   classSetDtorPrivate $
   classSetEntityPrefix "" $
@@ -89,12 +90,13 @@
     objT c_QString
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ test (qtVersion >= [4, 2]) $ makeSignal c_QClipboard "changed" listenerQClipboardMode
-  , just $ makeSignal c_QClipboard "dataChanged" listener
-  , test (qtVersion >= [4, 2]) $ makeSignal c_QClipboard "findBufferChanged" listener
-  , just $ makeSignal c_QClipboard "selectionChanged" listener
+  [ test (qtVersion >= [4, 2]) $ makeSignal "changed" listenerQClipboardMode
+  , just $ makeSignal "dataChanged" listener
+  , test (qtVersion >= [4, 2]) $ makeSignal "findBufferChanged" listener
+  , just $ makeSignal "selectionChanged" listener
   ]
 
 e_Mode =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QClipboard.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QClipboard.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QClipboard.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QClipboard.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QCloseEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QCloseEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QCloseEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QCloseEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QColor.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QColor.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QColor.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QColor.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QCursor.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QCursor.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QCursor.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QCursor.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QDoubleValidator.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QDoubleValidator.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QDoubleValidator.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QDoubleValidator.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QEnterEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QEnterEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QEnterEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QEnterEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QExposeEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QExposeEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QExposeEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QExposeEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFocusEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFocusEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFocusEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFocusEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFont.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFont.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFont.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFont.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFontDatabase.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFontDatabase.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFontDatabase.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QFontDatabase.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QGradient.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QGradient.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QGradient.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QGradient.hs
@@ -1,6 +1,6 @@
  -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -82,12 +82,12 @@
   ]
 
 e_CoordinateMode =
-  makeQtEnum (ident1 "QGradient" "CoordinateMode") [includeStd "QGradient"]
+  makeQtEnum (ident1 "QGradient" "CoordinateMode") [includeStd "QGradient"] $
   [ "LogicalMode"
   , "StretchToDeviceMode"
   , "ObjectBoundingMode"
-  , "ObjectMode"
-  ]
+  ] ++
+  ["ObjectMode" | qtVersion >= [5, 12]]
 
 e_Preset =
   makeQtEnum (ident1 "QGradient" "Preset") [includeStd "QGradient"]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QHideEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QHideEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QHideEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QHideEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QHoverEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QHoverEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QHoverEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QHoverEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIcon.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIcon.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIcon.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIcon.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIcon.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIcon.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIcon.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIcon.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QImage.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QImage.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QImage.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QImage.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QInputEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QInputEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QInputEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QInputEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIntValidator.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIntValidator.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIntValidator.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QIntValidator.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QKeyEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QKeyEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QKeyEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QKeyEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QMouseEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QMouseEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QMouseEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QMouseEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QOpenGLWindow.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QOpenGLWindow.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QOpenGLWindow.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QOpenGLWindow.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -50,11 +50,12 @@
 aModule =
   AQtModule $
   makeQtModuleWithMinVersion ["Gui", "QOpenGLWindow"] minVersion $
-  [ qtExport c_QOpenGLWindow ] ++
-  map QtExportSignal signals ++
-  [ qtExport e_UpdateBehavior ]
+  [ QtExportClassAndSignals c_QOpenGLWindow signals
+  , qtExport e_UpdateBehavior
+  ]
 
-c_QOpenGLWindow =
+(c_QOpenGLWindow, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QOpenGLWindow"] $
   classSetEntityPrefix "" $
   makeClass (ident "QOpenGLWindow") Nothing [c_QPaintDeviceWindow]
@@ -72,8 +73,9 @@
   , mkConstMethod "updateBehavior" np $ enumT e_UpdateBehavior
   ]
 
-signals =
-  [ makeSignal c_QOpenGLWindow "frameSwapped" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "frameSwapped" listener
   ]
 
 e_UpdateBehavior =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintDevice.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintDevice.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintDevice.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintDevice.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintDeviceWindow.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintDeviceWindow.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintDeviceWindow.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintDeviceWindow.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPaintEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPainter.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPainter.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPainter.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPainter.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPainterPath.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPainterPath.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPainterPath.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPainterPath.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPen.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPen.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPen.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPen.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPixmap.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPixmap.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPixmap.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPixmap.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPixmap.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPixmap.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPixmap.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPixmap.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPolygon.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPolygon.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPolygon.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPolygon.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPolygonF.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPolygonF.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPolygonF.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QPolygonF.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QRasterWindow.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QRasterWindow.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QRasterWindow.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QRasterWindow.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QRegion.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QRegion.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QRegion.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QRegion.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QShowEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QShowEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QShowEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QShowEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QStandardItemModel.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QStandardItemModel.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QStandardItemModel.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QStandardItemModel.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QSurface.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QSurface.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QSurface.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QSurface.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QTransform.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QTransform.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QTransform.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QTransform.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QValidator.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QValidator.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QValidator.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QValidator.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -42,11 +42,12 @@
 aModule =
   AQtModule $
   makeQtModule ["Gui", "QValidator"] $
-  (qtExport c_QValidator) :
-  map QtExportSignal signals ++
-  [ qtExport e_State ]
+  [ QtExportClassAndSignals c_QValidator signals
+  , qtExport e_State
+  ]
 
-c_QValidator =
+(c_QValidator, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QValidator"] $
   classSetEntityPrefix "" $
   makeClass (ident "QValidator") Nothing [c_QObject]
@@ -56,8 +57,9 @@
   , mkConstMethod "validate" [refT $ objT c_QString, refT intT] $ enumT e_State
   ]
 
-signals =
-  [ makeSignal c_QValidator "changed" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "changed" listener
   ]
 
 e_State =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWheelEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWheelEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWheelEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWheelEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWindow.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWindow.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWindow.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWindow.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -82,13 +82,13 @@
 aModule =
   AQtModule $
   makeQtModuleWithMinVersion ["Gui", "QWindow"] minVersion $
-  [ qtExport c_QWindow ] ++
-  map QtExportSignal signals ++
-  [ qtExport e_AncestorMode
+  [ QtExportClassAndSignals c_QWindow signals
+  , qtExport e_AncestorMode
   , qtExport e_Visibility
   ]
 
-c_QWindow =
+(c_QWindow, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QWindow"] $
   classSetEntityPrefix "" $
   makeClass (ident "QWindow") Nothing [c_QObject, c_QSurface] $
@@ -166,25 +166,26 @@
   , just $ mkProp "y" intT
   ]
 
-signals =
-  [ makeSignal c_QWindow "activeChanged" listener
-  , makeSignal c_QWindow "contentOrientationChanged" listenerScreenOrientation
-  , makeSignal c_QWindow "focusObjectChanged" listenerPtrQObject
-  , makeSignal c_QWindow "heightChanged" listenerInt
-  , makeSignal c_QWindow "maximumHeightChanged" listenerInt
-  , makeSignal c_QWindow "maximumWidthChanged" listenerInt
-  , makeSignal c_QWindow "minimumHeightChanged" listenerInt
-  , makeSignal c_QWindow "minimumWidthChanged" listenerInt
-  , makeSignal c_QWindow "modalityChanged" listenerWindowModality
-  , makeSignal c_QWindow "opacityChanged" listenerQreal
-    -- TODO makeSignal c_QWindow "screenChanged" listenerPtrQScreen
-  , makeSignal c_QWindow "visibilityChanged" listenerQWindowVisibility
-  , makeSignal c_QWindow "visibleChanged" listenerBool
-  , makeSignal c_QWindow "widthChanged" listenerInt
-  , makeSignal c_QWindow "windowStateChanged" listenerWindowState
-  , makeSignal c_QWindow "windowTitleChanged" listenerQString
-  , makeSignal c_QWindow "xChanged" listenerInt
-  , makeSignal c_QWindow "yChanged" listenerInt
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "activeChanged" listener
+  , makeSignal "contentOrientationChanged" listenerScreenOrientation
+  , makeSignal "focusObjectChanged" listenerPtrQObject
+  , makeSignal "heightChanged" listenerInt
+  , makeSignal "maximumHeightChanged" listenerInt
+  , makeSignal "maximumWidthChanged" listenerInt
+  , makeSignal "minimumHeightChanged" listenerInt
+  , makeSignal "minimumWidthChanged" listenerInt
+  , makeSignal "modalityChanged" listenerWindowModality
+  , makeSignal "opacityChanged" listenerQreal
+    -- TODO makeSignal "screenChanged" listenerPtrQScreen
+  , makeSignal "visibilityChanged" listenerQWindowVisibility
+  , makeSignal "visibleChanged" listenerBool
+  , makeSignal "widthChanged" listenerInt
+  , makeSignal "windowStateChanged" listenerWindowState
+  , makeSignal "windowTitleChanged" listenerQString
+  , makeSignal "xChanged" listenerInt
+  , makeSignal "yChanged" listenerInt
   ]
 
 e_AncestorMode =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWindow.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWindow.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWindow.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QWindow.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QtahOpenGLWindow.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QtahOpenGLWindow.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QtahOpenGLWindow.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QtahOpenGLWindow.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QtahRasterWindow.hs b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QtahRasterWindow.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Gui/QtahRasterWindow.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Gui/QtahRasterWindow.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Imports.hs b/src/Graphics/UI/Qtah/Generator/Interface/Imports.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Imports.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Imports.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Internal.hs b/src/Graphics/UI/Qtah/Generator/Interface/Internal.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Internal.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Internal.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Internal/Callback.hs b/src/Graphics/UI/Qtah/Generator/Interface/Internal/Callback.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Internal/Callback.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Internal/Callback.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -70,6 +70,7 @@
   e_ToolButtonStyle,
   e_WindowModality,
   e_WindowState,
+  fl_WindowStates,
   qreal,
   qlonglong,
   )
@@ -85,6 +86,7 @@
   fl_DockWidgetFeatures,
   )
 import Graphics.UI.Qtah.Generator.Interface.Widgets.QGraphicsItem (c_QGraphicsItem)
+import {-# SOURCE #-} Graphics.UI.Qtah.Generator.Interface.Widgets.QMdiSubWindow (c_QMdiSubWindow)
 import {-# SOURCE #-} Graphics.UI.Qtah.Generator.Interface.Widgets.QSystemTrayIcon (
   e_ActivationReason,
   )
@@ -113,6 +115,7 @@
       , just $ Export cb_PtrQAbstractItemModelVoid
       , just $ Export cb_PtrQActionVoid
       , just $ Export cb_PtrQGraphicsItemPtrQEventBool
+      , just $ Export cb_PtrQMdiSubWindowVoid
       , just $ Export cb_PtrQObjectPtrQEventBool
       , just $ Export cb_PtrQObjectVoid
       , just $ Export cb_PtrQPaintEventVoid
@@ -144,6 +147,7 @@
       , just $ Export cb_ToolButtonStyleVoid
       , just $ Export cb_WindowModalityVoid
       , just $ Export cb_WindowStateVoid
+      , just $ Export cb_WindowStatesWindowStatesVoid
       , just $ Export cb_QlonglongVoid
       , just $ Export cb_IntQlonglongVoid
       , just $ Export cb_ProcessErrorVoid
@@ -212,6 +216,10 @@
   makeCallback (toExtName "CallbackPtrQGraphicsItemPtrQEventBool")
   [ptrT $ objT c_QGraphicsItem, ptrT $ objT c_QEvent] boolT
 
+cb_PtrQMdiSubWindowVoid =
+  makeCallback (toExtName "CallbackPtrQMdiSubWindowVoid")
+  [ptrT $ objT c_QMdiSubWindow] voidT
+
 cb_PtrQObjectPtrQEventBool =
   makeCallback (toExtName "CallbackPtrQObjectPtrQEventBool")
   [ptrT $ objT c_QObject, ptrT $ objT c_QEvent] boolT
@@ -341,6 +349,10 @@
 cb_WindowStateVoid =
   makeCallback (toExtName "CallbackWindowStateVoid")
   [enumT e_WindowState] voidT
+
+cb_WindowStatesWindowStatesVoid =
+  makeCallback (toExtName "CallbackWindowStatesWindowStatesVoid")
+  [flagsT fl_WindowStates, flagsT fl_WindowStates] voidT
 
 cb_QlonglongVoid =
   makeCallback (toExtName "CallbackQlonglongVoid")
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Internal/EventListener.hs b/src/Graphics/UI/Qtah/Generator/Interface/Internal/EventListener.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Internal/EventListener.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Internal/EventListener.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Internal/SceneEventListener.hs b/src/Graphics/UI/Qtah/Generator/Interface/Internal/SceneEventListener.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Internal/SceneEventListener.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Internal/SceneEventListener.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -58,9 +58,12 @@
 import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QLabel as QLabel
 import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QLayout as QLayout
 import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QLayoutItem as QLayoutItem
+import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QLCDNumber as QLCDNumber
 import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QLineEdit as QLineEdit
 import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QListView as QListView
 import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QMainWindow as QMainWindow
+import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QMdiArea as QMdiArea
+import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QMdiSubWindow as QMdiSubWindow
 import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QMenu as QMenu
 import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QMenuBar as QMenuBar
 import qualified Graphics.UI.Qtah.Generator.Interface.Widgets.QMessageBox as QMessageBox
@@ -138,9 +141,12 @@
   , QLabel.aModule
   , QLayout.aModule
   , QLayoutItem.aModule
+  , QLCDNumber.aModule
   , QLineEdit.aModule
   , QListView.aModule
   , QMainWindow.aModule
+  , QMdiArea.aModule
+  , QMdiSubWindow.aModule
   , QMenu.aModule
   , QMenuBar.aModule
   , QMessageBox.aModule
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractButton.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractButton.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractButton.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractButton.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -46,11 +46,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QAbstractButton"] $
-  qtExport c_QAbstractButton :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QAbstractButton"]
+  [ QtExportClassAndSignals c_QAbstractButton signals ]
 
-c_QAbstractButton =
+(c_QAbstractButton, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QAbstractButton"] $
   classSetEntityPrefix "" $
   makeClass (ident "QAbstractButton") Nothing [c_QWidget]
@@ -72,9 +72,10 @@
   , mkMethod "toggle" np voidT
   ]
 
-signals =
-  [ makeSignal c_QAbstractButton "clicked" listenerBool
-  , makeSignal c_QAbstractButton "pressed" listener
-  , makeSignal c_QAbstractButton "released" listener
-  , makeSignal c_QAbstractButton "toggled" listenerBool
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "clicked" listenerBool
+  , makeSignal "pressed" listener
+  , makeSignal "released" listener
+  , makeSignal "toggled" listenerBool
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractButton.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractButton.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractButton.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractButton.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractGraphicsShapeItem.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractGraphicsShapeItem.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractGraphicsShapeItem.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractGraphicsShapeItem.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractItemDelegate.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractItemDelegate.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractItemDelegate.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractItemDelegate.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2018-2019 The Qtah Authors.
+-- Copyright 2018-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -35,17 +35,18 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QAbstractItemDelegate"] $
-  qtExport c_QAbstractItemDelegate :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QAbstractItemDelegate"]
+  [ QtExportClassAndSignals c_QAbstractItemDelegate signals ]
 
-c_QAbstractItemDelegate =
+(c_QAbstractItemDelegate, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QAbstractItemDelegate"] $
   classSetEntityPrefix "" $
   makeClass (ident "QAbstractItemDelegate") Nothing [c_QObject]
   [ -- TODO Methods.
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   [ -- TODO Signals.
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractItemView.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractItemView.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractItemView.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractItemView.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -77,10 +77,9 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QAbstractItemView"] $
-  qtExport c_QAbstractItemView :
-  map QtExportSignal signals ++
-  [ qtExport e_DragDropMode
+  makeQtModule ["Widgets", "QAbstractItemView"]
+  [ QtExportClassAndSignals c_QAbstractItemView signals
+  , qtExport e_DragDropMode
   , qtExport e_EditTrigger
   , qtExport fl_EditTriggers
   , qtExport e_ScrollHint
@@ -89,7 +88,8 @@
   , qtExport e_SelectionMode
   ]
 
-c_QAbstractItemView =
+(c_QAbstractItemView, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QAbstractItemView"] $
   classSetEntityPrefix "" $
   makeClass (ident "QAbstractItemView") Nothing [c_QAbstractScrollArea]
@@ -146,14 +146,15 @@
   , mkConstMethod "visualRect" [objT c_QModelIndex] $ objT c_QRect
   ]
 
-signals =
-  [ makeSignal c_QAbstractItemView "activated" listenerQModelIndex
-  , makeSignal c_QAbstractItemView "clicked" listenerQModelIndex
-  , makeSignal c_QAbstractItemView "doubleClicked" listenerQModelIndex
-  , makeSignal c_QAbstractItemView "entered" listenerQModelIndex
-  , makeSignal c_QAbstractItemView "iconSizeChanged" listenerQSize
-  , makeSignal c_QAbstractItemView "pressed" listenerQModelIndex
-  , makeSignal c_QAbstractItemView "viewportEntered" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "activated" listenerQModelIndex
+  , makeSignal "clicked" listenerQModelIndex
+  , makeSignal "doubleClicked" listenerQModelIndex
+  , makeSignal "entered" listenerQModelIndex
+  , makeSignal "iconSizeChanged" listenerQSize
+  , makeSignal "pressed" listenerQModelIndex
+  , makeSignal "viewportEntered" listener
   ]
 
 e_DragDropMode =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractScrollArea.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractScrollArea.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractScrollArea.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractScrollArea.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSlider.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSlider.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSlider.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSlider.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -55,11 +55,12 @@
 aModule =
   AQtModule $
   makeQtModule ["Widgets", "QAbstractSlider"] $
-  qtExport c_QAbstractSlider :
-  map QtExportSignal signals ++
-  [ qtExport e_SliderAction ]
+  [ QtExportClassAndSignals c_QAbstractSlider signals
+  , qtExport e_SliderAction
+  ]
 
-c_QAbstractSlider =
+(c_QAbstractSlider, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QAbstractSlider"] $
   classSetEntityPrefix "" $
   makeClass (ident "QAbstractSlider") Nothing [c_QWidget]
@@ -79,13 +80,14 @@
   , mkProp "value" intT
   ]
 
-signals =
-  [ makeSignal c_QAbstractSlider "actionTriggered" listenerQAbstractSliderAction
-  , makeSignal c_QAbstractSlider "rangeChanged" listenerIntInt
-  , makeSignal c_QAbstractSlider "sliderMoved" listenerInt
-  , makeSignal c_QAbstractSlider "sliderPressed" listener
-  , makeSignal c_QAbstractSlider "sliderReleased" listener
-  , makeSignal c_QAbstractSlider "valueChanged" listenerInt
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "actionTriggered" listenerQAbstractSliderAction
+  , makeSignal "rangeChanged" listenerIntInt
+  , makeSignal "sliderMoved" listenerInt
+  , makeSignal "sliderPressed" listener
+  , makeSignal "sliderReleased" listener
+  , makeSignal "valueChanged" listenerInt
   ]
 
 -- This uses 'makeEnum' rather than 'makeQtEnum' in order to use the external
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSlider.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSlider.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSlider.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSlider.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSpinBox.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSpinBox.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSpinBox.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAbstractSpinBox.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -55,16 +55,16 @@
 aModule =
   AQtModule $
   makeQtModule ["Widgets", "QAbstractSpinBox"] $
-  qtExport c_QAbstractSpinBox :
-  map QtExportSignal signals ++
   collect
-  [ test (qtVersion >= [4, 2]) $ qtExport e_ButtonSymbols
+  [ just $ QtExportClassAndSignals c_QAbstractSpinBox signals
+  , test (qtVersion >= [4, 2]) $ qtExport e_ButtonSymbols
   , just $ qtExport e_CorrectionMode
   , just $ qtExport e_StepEnabledFlag
   , just $ qtExport fl_StepEnabled
   ]
 
-c_QAbstractSpinBox =
+(c_QAbstractSpinBox, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QAbstractSpinBox"] $
   classSetEntityPrefix "" $
   makeClass (ident "QAbstractSpinBox") Nothing [c_QWidget] $
@@ -93,8 +93,9 @@
   , just $ mkProp "wrapping" boolT
   ]
 
-signals =
-  [ makeSignal c_QAbstractSpinBox "editingFinished" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "editingFinished" listener
   ]
 
 e_ButtonSymbols =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAction.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAction.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAction.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAction.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -53,8 +53,7 @@
 aModule =
   AQtModule $
   makeQtModule ["Widgets", "QAction"] $
-  qtExport c_QAction :
-  map QtExportSignal signals ++
+  QtExportClassAndSignals c_QAction signals :
   collect
   [ just $ qtExport e_ActionEvent
   , just $ qtExport e_MenuRole
@@ -62,7 +61,8 @@
   , test (qtVersion < [5]) $ qtExport e_SoftKeyRole
   ]
 
-c_QAction =
+(c_QAction, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QAction"] $
   classSetEntityPrefix "" $
   makeClass (ident "QAction") Nothing [c_QObject] $
@@ -110,11 +110,12 @@
   , just $ mkProp "whatsThis" $ objT c_QString
   ]
 
-signals =
-  [ makeSignal c_QAction "changed" listener
-  , makeSignal c_QAction "hovered" listener
-  , makeSignal c_QAction "toggled" listenerBool
-  , makeSignal c_QAction "triggered" listenerBool
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "changed" listener
+  , makeSignal "hovered" listener
+  , makeSignal "toggled" listenerBool
+  , makeSignal "triggered" listenerBool
   ]
 
 e_ActionEvent =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAction.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAction.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAction.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QAction.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QActionGroup.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QActionGroup.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QActionGroup.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QActionGroup.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -46,11 +46,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QActionGroup"] $
-  qtExport c_QActionGroup :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QActionGroup"]
+  [ QtExportClassAndSignals c_QActionGroup signals ]
 
-c_QActionGroup =
+(c_QActionGroup, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QActionGroup"] $
   classSetEntityPrefix "" $
   makeClass (ident "QActionGroup") Nothing
@@ -69,7 +69,8 @@
   , mkBoolIsProp "visible"
   ]
 
-signals =
-  [ makeSignal c_QActionGroup "hovered" listenerPtrQAction
-  , makeSignal c_QActionGroup "triggered" listenerPtrQAction
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "hovered" listenerPtrQAction
+  , makeSignal "triggered" listenerPtrQAction
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QApplication.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QApplication.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QApplication.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QApplication.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -64,13 +64,13 @@
 aModule =
   AQtModule $
   makeQtModule ["Widgets", "QApplication"] $
-  [ qtExport c_QApplication
-  ] ++ map QtExportSignal signals ++
   collect
-  [ test (qtVersion < [5]) $ qtExport e_Type
+  [ just $ QtExportClassAndSignals c_QApplication signals
+  , test (qtVersion < [5]) $ qtExport e_Type
   ]
 
-c_QApplication =
+(c_QApplication, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [ includeStd "QApplication"
                  , includeLocal "wrap_qapplication.hpp"
                  ] $
@@ -162,13 +162,12 @@
     -- TODO x11ProcessEvent
   ]
 
-signals =
-  [ makeSignal c_QApplication "aboutToReleaseGpuResources" listener
-  , makeSignal c_QApplication "aboutToUseGpuResources" listener
-    -- TODO commitDataRequest
-  , makeSignal c_QApplication "focusChanged" listenerPtrQWidgetPtrQWidget
-  , makeSignal c_QApplication "fontDatabaseChanged" listener
-  , makeSignal c_QApplication "lastWindowClosed" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ -- TODO commitDataRequest
+    makeSignal "focusChanged" listenerPtrQWidgetPtrQWidget
+  , makeSignal "fontDatabaseChanged" listener
+  , makeSignal "lastWindowClosed" listener
     -- TODO quit (static!)
     -- TODO saveStateRequest
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QBoxLayout.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QBoxLayout.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QBoxLayout.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QBoxLayout.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QButtonGroup.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QButtonGroup.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QButtonGroup.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QButtonGroup.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -54,11 +54,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QButtonGroup"] $
-  (qtExport c_QButtonGroup) :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QButtonGroup"]
+  [ QtExportClassAndSignals c_QButtonGroup signals ]
 
-c_QButtonGroup =
+(c_QButtonGroup, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QButtonGroup"] $
   classSetEntityPrefix "" $
   makeClass (ident "QButtonGroup") Nothing [c_QObject] $
@@ -77,18 +77,21 @@
   , test (qtVersion >= [4, 1]) $ mkMethod "setId" [ptrT $ objT c_QAbstractButton, intT] voidT
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ just $ makeSignal c_QButtonGroup "buttonClicked" listenerPtrQAbstractButton
-  , just $ makeSignal c_QButtonGroup "buttonClickedId" listenerInt
+  [ just $ makeSignal' "buttonClicked" "buttonClicked" listenerPtrQAbstractButton
+  , just $ makeSignal' "buttonClicked" "buttonClickedId" listenerInt
   , test (qtVersion >= [4, 2]) $
-    makeSignal c_QButtonGroup "buttonPressed" listenerPtrQAbstractButton
-  , test (qtVersion >= [4, 2]) $ makeSignal c_QButtonGroup "buttonPressedId" listenerInt
+    makeSignal' "buttonPressed" "buttonPressed" listenerPtrQAbstractButton
   , test (qtVersion >= [4, 2]) $
-    makeSignal c_QButtonGroup "buttonReleased" listenerPtrQAbstractButton
-  , test (qtVersion >= [4, 2]) $ makeSignal c_QButtonGroup "buttonReleasedId" listenerInt
+    makeSignal' "buttonPressed" "buttonPressedId" listenerInt
+  , test (qtVersion >= [4, 2]) $
+    makeSignal' "buttonReleased" "buttonReleased" listenerPtrQAbstractButton
+  , test (qtVersion >= [4, 2]) $
+    makeSignal' "buttonReleased" "buttonReleasedId" listenerInt
   , test (qtVersion >= [5, 2]) $
-    makeSignal c_QButtonGroup "buttonToggled" listenerPtrQAbstractButtonBool
+    makeSignal' "buttonToggled" "buttonToggled" listenerPtrQAbstractButtonBool
   , test (qtVersion >= [5, 2]) $
-    makeSignal c_QButtonGroup "buttonToggledId" listenerIntBool
+    makeSignal' "buttonToggled" "buttonToggledId" listenerIntBool
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QCheckBox.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QCheckBox.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QCheckBox.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QCheckBox.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QComboBox.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QComboBox.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QComboBox.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QComboBox.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -48,11 +48,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QComboBox"] $
-  qtExport c_QComboBox :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QComboBox"]
+  [ QtExportClassAndSignals c_QComboBox signals ]
 
-c_QComboBox =
+(c_QComboBox, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QComboBox"] $
   classSetEntityPrefix "" $
   makeClass (ident "QComboBox") Nothing [c_QWidget] $
@@ -68,11 +68,12 @@
   , just $ mkProp "currentText" $ objT c_QString
   ]
 
-signals =
-  [ makeSignal c_QComboBox "activated" listenerInt
-  , makeSignal' c_QComboBox "activated" "activatedString" listenerQString
-  , makeSignal c_QComboBox "currentIndexChanged" listenerInt
-  , makeSignal' c_QComboBox "currentIndexChanged" "currentIndexChangedString" listenerQString
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "activated" listenerInt
+  , makeSignal' "activated" "activatedString" listenerQString
+  , makeSignal "currentIndexChanged" listenerInt
+  , makeSignal' "currentIndexChanged" "currentIndexChangedString" listenerQString
   ]
 
 -- TODO The rest of QComboBox.
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDateEdit.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDateEdit.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDateEdit.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDateEdit.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2018-2019 The Qtah Authors.
+-- Copyright 2018-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDateTimeEdit.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDateTimeEdit.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDateTimeEdit.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDateTimeEdit.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2018-2019 The Qtah Authors.
+-- Copyright 2018-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -49,14 +49,14 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QDateTimeEdit"] $
-  qtExport c_QDateTimeEdit :
-  map QtExportSignal signals ++
-  [ qtExport e_Section
+  makeQtModule ["Widgets", "QDateTimeEdit"]
+  [ QtExportClassAndSignals c_QDateTimeEdit signals
+  , qtExport e_Section
   , qtExport fl_Sections
   ]
 
-c_QDateTimeEdit =
+(c_QDateTimeEdit, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QDateTimeEdit"] $
   classSetEntityPrefix "" $
   makeClass (ident "QDateTimeEdit") Nothing [c_QAbstractSpinBox] $
@@ -86,8 +86,9 @@
   -- TODO Other methods.
   ]
 
-signals =
-  [ makeSignal c_QDateTimeEdit "dateChanged" listenerQDate
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "dateChanged" listenerQDate
   -- TODO void dateTimeChanged(const QDateTime &datetime)
   -- TODO void timeChanged(const QTime &time)
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDial.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDial.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDial.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDial.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDialog.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDialog.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDialog.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDialog.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -46,11 +46,12 @@
 aModule =
   AQtModule $
   makeQtModule ["Widgets", "QDialog"] $
-  qtExport c_QDialog :
-  map QtExportSignal signals ++
-  [ qtExport e_DialogCode ]
+  [ QtExportClassAndSignals c_QDialog signals
+  , qtExport e_DialogCode
+  ]
 
-c_QDialog =
+(c_QDialog, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QDialog"] $
   classSetEntityPrefix "" $
   makeClass (ident "QDialog") Nothing [c_QWidget]
@@ -67,10 +68,11 @@
   , mkBoolIsProp "sizeGripEnabled"
   ]
 
-signals =
-  [ makeSignal c_QDialog "accepted" listener
-  , makeSignal c_QDialog "finished" listenerInt
-  , makeSignal c_QDialog "rejected" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "accepted" listener
+  , makeSignal "finished" listenerInt
+  , makeSignal "rejected" listener
   ]
 
 e_DialogCode =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDialogButtonBox.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDialogButtonBox.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDialogButtonBox.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDialogButtonBox.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -59,16 +59,16 @@
 
 aModule =
   AQtModule $
-  makeQtModuleWithMinVersion ["Widgets", "QDialogButtonBox"] minVersion $
-  (qtExport c_QDialogButtonBox) :
-  map QtExportSignal signals ++
-  [ qtExport e_ButtonLayout
+  makeQtModuleWithMinVersion ["Widgets", "QDialogButtonBox"] minVersion
+  [ QtExportClassAndSignals c_QDialogButtonBox signals
+  , qtExport e_ButtonLayout
   , qtExport e_ButtonRole
   , qtExport e_StandardButton
   , qtExport fl_StandardButtons
   ]
 
-c_QDialogButtonBox =
+(c_QDialogButtonBox, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QDialogButtonBox"] $
   classSetEntityPrefix "" $
   makeClass (ident "QDialogButtonBox") Nothing [c_QWidget]
@@ -96,11 +96,12 @@
   , mkProp "standardButtons" $ flagsT fl_StandardButtons
   ]
 
-signals =
-  [ makeSignal c_QDialogButtonBox "accepted" listener
-  , makeSignal c_QDialogButtonBox "clicked" listenerPtrQAbstractButton
-  , makeSignal c_QDialogButtonBox "helpRequested" listener
-  , makeSignal c_QDialogButtonBox "rejected" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "accepted" listener
+  , makeSignal "clicked" listenerPtrQAbstractButton
+  , makeSignal "helpRequested" listener
+  , makeSignal "rejected" listener
   ]
 
 e_ButtonLayout =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDockWidget.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDockWidget.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDockWidget.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDockWidget.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -59,14 +59,14 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QDockWidget"] $
-  qtExport c_QDockWidget :
-  map QtExportSignal signals ++
-  [ qtExport e_DockWidgetFeature
+  makeQtModule ["Widgets", "QDockWidget"]
+  [ QtExportClassAndSignals c_QDockWidget signals
+  , qtExport e_DockWidgetFeature
   , qtExport fl_DockWidgetFeatures
   ]
 
-c_QDockWidget =
+(c_QDockWidget, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QDockWidget"] $
   classSetEntityPrefix "" $
   makeClass (ident "QDockWidget") Nothing [c_QWidget] $
@@ -85,14 +85,14 @@
   , just $ mkProp "widget" $ ptrT $ objT c_QWidget
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ just $ makeSignal c_QDockWidget "allowedAreasChanged" listenerDockWidgetAreas
-  , test (qtVersion >= [4, 3]) $
-    makeSignal c_QDockWidget "dockLocationChanged" listenerDockWidgetArea
-  , just $ makeSignal c_QDockWidget "featuresChanged" listenerQDockWidgetFeatures
-  , just $ makeSignal c_QDockWidget "topLevelChanged" listenerBool
-  , just $ makeSignal c_QDockWidget "visibilityChanged" listenerBool
+  [ just $ makeSignal "allowedAreasChanged" listenerDockWidgetAreas
+  , test (qtVersion >= [4, 3]) $ makeSignal "dockLocationChanged" listenerDockWidgetArea
+  , just $ makeSignal "featuresChanged" listenerQDockWidgetFeatures
+  , just $ makeSignal "topLevelChanged" listenerBool
+  , just $ makeSignal "visibilityChanged" listenerBool
   ]
 
 (e_DockWidgetFeature, fl_DockWidgetFeatures) =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDockWidget.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDockWidget.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDockWidget.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDockWidget.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDoubleSpinBox.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDoubleSpinBox.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDoubleSpinBox.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QDoubleSpinBox.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -47,11 +47,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QDoubleSpinBox"] $
-  qtExport c_QDoubleSpinBox :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QDoubleSpinBox"]
+  [ QtExportClassAndSignals c_QDoubleSpinBox signals ]
 
-c_QDoubleSpinBox =
+(c_QDoubleSpinBox, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QDoubleSpinBox"] $
   classSetEntityPrefix "" $
   makeClass (ident "QDoubleSpinBox") Nothing [c_QAbstractSpinBox]
@@ -70,7 +70,8 @@
   , mkConstMethod "valueFromText" [objT c_QString] doubleT
   ]
 
-signals =
-  [ makeSignal' c_QDoubleSpinBox "valueChanged" "valueChangedDouble" listenerDouble
-  , makeSignal' c_QDoubleSpinBox "valueChanged" "valueChangedString" listenerQString
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal' "valueChanged" "valueChangedDouble" listenerDouble
+  , makeSignal' "valueChanged" "valueChangedString" listenerQString
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFileDialog.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFileDialog.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFileDialog.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFileDialog.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -53,16 +53,17 @@
 aModule =
   AQtModule $
   makeQtModule ["Widgets", "QFileDialog"] $
-  [ qtExport c_QFileDialog
+  [ QtExportClassAndSignals c_QFileDialog signals
   , qtExport e_AcceptMode
   , qtExport e_DialogLabel
   , qtExport e_FileMode
   , qtExport e_Option
   , qtExport fl_Options
   , qtExport e_ViewMode
-  ] ++ map QtExportSignal signals
+  ]
 
-c_QFileDialog =
+(c_QFileDialog, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QFileDialog"] $
   classSetEntityPrefix "" $
   makeClass (ident "QFileDialog") Nothing [c_QDialog] $
@@ -140,15 +141,16 @@
   , just $ mkProp "viewMode" $ enumT e_ViewMode
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ just $ makeSignal c_QFileDialog "currentChanged" listenerQString
+  [ just $ makeSignal "currentChanged" listenerQString
     -- TODO currentUrlChanged (>=5.2)
-  , just $ makeSignal c_QFileDialog "directoryEntered" listenerQString
+  , just $ makeSignal "directoryEntered" listenerQString
     -- TODO directoryUrlEntered (>=5.2)
-  , just $ makeSignal c_QFileDialog "fileSelected" listenerQString
+  , just $ makeSignal "fileSelected" listenerQString
     -- TODO filesSelected
-  , test (qtVersion >= [4, 3]) $ makeSignal c_QFileDialog "filterSelected" listenerQString
+  , test (qtVersion >= [4, 3]) $ makeSignal "filterSelected" listenerQString
     -- TODO urlSelected (>=5.2)
     -- TODO urlsSelected (>=5.2)
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFormLayout.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFormLayout.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFormLayout.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFormLayout.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFrame.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFrame.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFrame.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QFrame.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsEllipseItem.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsEllipseItem.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsEllipseItem.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsEllipseItem.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsItem.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsItem.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsItem.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsItem.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsItem.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsItem.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsItem.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsItem.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsPixmapItem.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsPixmapItem.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsPixmapItem.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsPixmapItem.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsPolygonItem.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsPolygonItem.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsPolygonItem.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsPolygonItem.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsRectItem.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsRectItem.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsRectItem.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsRectItem.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsScene.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsScene.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsScene.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsScene.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -41,14 +41,13 @@
 import Foreign.Hoppy.Generator.Types (voidT, objT, ptrT, intT, boolT, enumT)
 import Foreign.Hoppy.Generator.Version (collect, just, test)
 import Graphics.UI.Qtah.Generator.Config (qtVersion)
-import Graphics.UI.Qtah.Generator.Interface.Core.Types (qreal)
+import Graphics.UI.Qtah.Generator.Interface.Core.Types (e_FocusReason, qreal)
 import Graphics.UI.Qtah.Generator.Interface.Core.QEvent (c_QEvent)
 -- import Graphics.UI.Qtah.Generator.Interface.Core.QLineF (c_QLineF)
 import Graphics.UI.Qtah.Generator.Interface.Core.QObject (c_QObject)
 import Graphics.UI.Qtah.Generator.Interface.Core.QPointF (c_QPointF)
 import Graphics.UI.Qtah.Generator.Interface.Core.QRectF (c_QRectF)
 -- import Graphics.UI.Qtah.Generator.Interface.Core.QString (c_QString)
-import Graphics.UI.Qtah.Generator.Interface.Core.Types hiding (aModule)
 import Graphics.UI.Qtah.Generator.Interface.Gui.QBrush (c_QBrush)
 import Graphics.UI.Qtah.Generator.Interface.Gui.QFont (c_QFont)
 import Graphics.UI.Qtah.Generator.Interface.Gui.QPainterPath (c_QPainterPath)
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsScene.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsScene.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsScene.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsScene.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneMouseEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneMouseEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneMouseEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneMouseEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneWheelEvent.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneWheelEvent.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneWheelEvent.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsSceneWheelEvent.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsView.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsView.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsView.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGraphicsView.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGridLayout.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGridLayout.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGridLayout.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGridLayout.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGroupBox.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGroupBox.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGroupBox.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QGroupBox.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -48,11 +48,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QGroupBox"] $
-  (qtExport c_QGroupBox) :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QGroupBox"]
+  [ QtExportClassAndSignals c_QGroupBox signals ]
 
-c_QGroupBox =
+(c_QGroupBox, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QGroupBox"] $
   classSetEntityPrefix "" $
   makeClass (ident "QGroupBox") Nothing [c_QWidget]
@@ -67,8 +67,9 @@
   , mkProp "title" $ objT c_QString
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ test (qtVersion >= [4, 2]) $ makeSignal c_QGroupBox "clicked" listenerBool
-  , just $ makeSignal c_QGroupBox "toggled" listenerBool
+  [ test (qtVersion >= [4, 2]) $ makeSignal "clicked" listenerBool
+  , just $ makeSignal "toggled" listenerBool
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QHBoxLayout.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QHBoxLayout.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QHBoxLayout.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QHBoxLayout.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QInputDialog.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QInputDialog.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QInputDialog.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QInputDialog.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -59,15 +59,15 @@
 
 aModule =
   AQtModule $
-  makeQtModuleWithMinVersion ["Widgets", "QInputDialog"] minVersion $
-  qtExport c_QInputDialog :
-  map QtExportSignal signals ++
-  [ qtExport e_InputDialogOption
+  makeQtModuleWithMinVersion ["Widgets", "QInputDialog"] minVersion
+  [ QtExportClassAndSignals c_QInputDialog signals
+  , qtExport e_InputDialogOption
   , qtExport fl_InputDialogOptions
   , qtExport e_InputMode
   ]
 
-c_QInputDialog =
+(c_QInputDialog, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QInputDialog"] $
   classSetEntityPrefix "" $
   makeClass (ident "QInputDialog") Nothing [c_QDialog] $
@@ -129,13 +129,14 @@
   , just $ mkProp "textValue" $ objT c_QString
   ]
 
-signals =
-  [ makeSignal c_QInputDialog "doubleValueChanged" listenerDouble
-  , makeSignal c_QInputDialog "doubleValueSelected" listenerDouble
-  , makeSignal c_QInputDialog "intValueChanged" listenerInt
-  , makeSignal c_QInputDialog "intValueSelected" listenerInt
-  , makeSignal c_QInputDialog "textValueChanged" listenerQString
-  , makeSignal c_QInputDialog "textValueSelected" listenerQString
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "doubleValueChanged" listenerDouble
+  , makeSignal "doubleValueSelected" listenerDouble
+  , makeSignal "intValueChanged" listenerInt
+  , makeSignal "intValueSelected" listenerInt
+  , makeSignal "textValueChanged" listenerQString
+  , makeSignal "textValueSelected" listenerQString
   ]
 
 (e_InputDialogOption, fl_InputDialogOptions) =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLCDNumber.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLCDNumber.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLCDNumber.hs
@@ -0,0 +1,107 @@
+-- This file is part of Qtah.
+--
+-- Copyright 2015-2020 The Qtah Authors.
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU Lesser General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU Lesser General Public License for more details.
+--
+-- You should have received a copy of the GNU Lesser General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+module Graphics.UI.Qtah.Generator.Interface.Widgets.QLCDNumber (
+  aModule,
+  ) where
+
+import Foreign.Hoppy.Generator.Spec (
+  (~:),
+  addReqIncludes,
+  classSetEntityPrefix,
+  ident,
+  ident1,
+  includeStd,
+  makeClass,
+  mkCtor,
+  mkProp,
+  mkConstMethod,
+  mkConstMethod',
+  mkMethod,
+  mkMethod',
+  mkProp,
+  np,
+  )
+import Foreign.Hoppy.Generator.Types (boolT, doubleT, enumT, intT, objT, ptrT, uintT, voidT)
+import Foreign.Hoppy.Generator.Version (collect, just)
+import Graphics.UI.Qtah.Generator.Interface.Widgets.QWidget (c_QWidget)
+import Graphics.UI.Qtah.Generator.Interface.Core.QString (c_QString)
+import Graphics.UI.Qtah.Generator.Interface.Widgets.QFrame (c_QFrame)
+import Graphics.UI.Qtah.Generator.Module (AModule (AQtModule), makeQtModule)
+import Graphics.UI.Qtah.Generator.Interface.Internal.Listener (listener)
+import Graphics.UI.Qtah.Generator.Types
+
+{-# ANN module "HLint: ignore Use camelCase" #-}
+
+aModule =
+  AQtModule $
+  makeQtModule ["Widgets", "QLCDNumber"]
+  [ QtExportClassAndSignals c_QLCDNumber signals
+  , qtExport e_Mode
+  , qtExport e_SegmentStyle
+  ]
+
+(c_QLCDNumber, signals) =
+  makeQtClassAndSignals signalGens $
+  addReqIncludes [includeStd "QLCDNumber"] $
+  classSetEntityPrefix "" $
+  makeClass (ident "QLCDNumber") Nothing [c_QFrame] $
+  collect
+  [ -- Ctors:
+    just $ mkCtor "new" np
+  , just $ mkCtor "newWithDigits" ["numDigits" ~: uintT]
+  , just $ mkCtor "newWithDigitsAndParent" ["numDigits" ~: uintT, "parent" ~: ptrT $ objT c_QWidget]
+  , just $ mkCtor "newWithParent" ["parent" ~: ptrT $ objT c_QWidget]
+    -- Properties:
+  , just $ mkProp "digitCount" intT
+  , just $ mkProp "mode" $ enumT e_Mode
+  , just $ mkProp "segmentStyle" $ enumT e_SegmentStyle
+  , just $ mkProp "smallDecimalPoint" boolT
+    -- Methods:
+  , just $ mkConstMethod' "checkOverflow" "checkOverflowInt" ["num" ~: intT] boolT
+  , just $ mkConstMethod' "checkOverflow" "checkOverflowDouble" ["num" ~: doubleT] boolT
+  , just $ mkConstMethod "intValue" np intT
+  , just $ mkConstMethod "value" np doubleT
+    -- Slots:
+  , just $ mkMethod' "display" "displayDouble" [doubleT] voidT
+  , just $ mkMethod' "display" "displayInt" [intT] voidT
+  , just $ mkMethod' "display" "displayString" [objT c_QString] voidT
+  , just $ mkMethod "setBinMode" np voidT
+  , just $ mkMethod "setDecMode" np voidT
+  , just $ mkMethod "setHexMode" np voidT
+  , just $ mkMethod "setOctMode" np voidT
+  ]
+
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "overflow" listener
+  ]
+
+e_Mode =
+  makeQtEnum (ident1 "QLCDNumber" "Mode") [includeStd "QLCDNumber"]
+  [ "Hex"
+  , "Dec"
+  , "Bin"
+  , "Oct"
+  ]
+
+e_SegmentStyle =
+  makeQtEnum (ident1 "QLCDNumber" "SegmentStyle") [includeStd "QLCDNumber"]
+  [ "Outline"
+  , "Filled"
+  , "Flat"
+  ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLabel.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLabel.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLabel.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLabel.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -61,11 +61,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QLabel"] $
-  qtExport c_QLabel :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QLabel"]
+  [ QtExportClassAndSignals c_QLabel signals ]
 
-c_QLabel =
+(c_QLabel, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QLabel"] $
   classSetEntityPrefix "" $
   makeClass (ident "QLabel") Nothing [c_QFrame]
@@ -98,7 +98,8 @@
   , mkProp "wordWrap" boolT
   ]
 
-signals =
-  [ makeSignal c_QLabel "linkActivated" listenerQString
-  , makeSignal c_QLabel "linkHovered" listenerQString
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "linkActivated" listenerQString
+  , makeSignal "linkHovered" listenerQString
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayout.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayout.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayout.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayout.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayout.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayout.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayout.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayout.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayoutItem.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayoutItem.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayoutItem.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLayoutItem.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLineEdit.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLineEdit.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLineEdit.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QLineEdit.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -60,11 +60,12 @@
 aModule =
   AQtModule $
   makeQtModule ["Widgets", "QLineEdit"] $
-  qtExport c_QLineEdit :
-  map QtExportSignal signals ++
-  [ qtExport e_EchoMode ]
+  [ QtExportClassAndSignals c_QLineEdit signals
+  , qtExport e_EchoMode
+  ]
 
-c_QLineEdit =
+(c_QLineEdit, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QLineEdit"] $
   classSetEntityPrefix "" $
   makeClass (ident "QLineEdit") Nothing [c_QWidget] $
@@ -120,13 +121,14 @@
   , just $ mkProp "validator" $ ptrT $ constT $ objT c_QValidator
   ]
 
-signals =
-  [ makeSignal c_QLineEdit "cursorPositionChanged" listenerIntInt
-  , makeSignal c_QLineEdit "editingFinished" listener
-  , makeSignal c_QLineEdit "returnPressed" listener
-  , makeSignal c_QLineEdit "selectionChanged" listener
-  , makeSignal c_QLineEdit "textEdited" listenerQString
-  , makeSignal c_QLineEdit "textChanged" listenerQString
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "cursorPositionChanged" listenerIntInt
+  , makeSignal "editingFinished" listener
+  , makeSignal "returnPressed" listener
+  , makeSignal "selectionChanged" listener
+  , makeSignal "textEdited" listenerQString
+  , makeSignal "textChanged" listenerQString
   ]
 
 e_EchoMode =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QListView.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QListView.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QListView.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QListView.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -53,17 +53,17 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QListView"] $
-  qtExport c_QListView :
-  map QtExportSignal signals ++
-  [ qtExport e_Flow
+  makeQtModule ["Widgets", "QListView"]
+  [ QtExportClassAndSignals c_QListView signals
+  , qtExport e_Flow
   , qtExport e_LayoutMode
   , qtExport e_Movement
   , qtExport e_ResizeMode
   , qtExport e_ViewMode
   ]
 
-c_QListView =
+(c_QListView, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QListView"] $
   classSetEntityPrefix "" $
   makeClass (ident "QListView") Nothing [c_QAbstractItemView] $
@@ -94,9 +94,10 @@
   , just $ mkMethod "visualRect" [refT $ constT $ objT c_QModelIndex] $ objT c_QRect
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ test (qtVersion >= [4, 2]) $ makeSignal c_QListView "indexesMoved" listenerRefConstQListQModelIndex
+  [ test (qtVersion >= [4, 2]) $ makeSignal "indexesMoved" listenerRefConstQListQModelIndex
   ]
 
 e_Flow =
@@ -129,5 +130,3 @@
   [ "ListMode"
   , "IconMode"
   ]
-
-
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMainWindow.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMainWindow.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMainWindow.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMainWindow.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -59,12 +59,12 @@
 aModule :: AModule
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QMainWindow"] $
-  qtExport c_QMainWindow :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QMainWindow"]
+  [ QtExportClassAndSignals c_QMainWindow signals ]
 
 c_QMainWindow :: Class
-c_QMainWindow =
+(c_QMainWindow, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QMainWindow"] $
   classSetEntityPrefix "" $
   makeClass (ident "QMainWindow") Nothing [c_QWidget]
@@ -114,8 +114,8 @@
   , mkProp "unifiedTitleAndToolBarOnMac" boolT
   ]
 
-signals :: [Signal]
-signals =
-  [ makeSignal c_QMainWindow "iconSizeChanged" listenerQSize
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "iconSizeChanged" listenerQSize
     -- TODO toolButtonStyleChanged
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMdiArea.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMdiArea.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMdiArea.hs
@@ -0,0 +1,119 @@
+-- This file is part of Qtah.
+--
+-- Copyright 2015-2020 The Qtah Authors.
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU Lesser General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU Lesser General Public License for more details.
+--
+-- You should have received a copy of the GNU Lesser General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+module Graphics.UI.Qtah.Generator.Interface.Widgets.QMdiArea (
+  aModule,
+  c_QMdiArea,
+  ) where
+
+import Foreign.Hoppy.Generator.Spec (
+  addReqIncludes,
+  classSetEntityPrefix,
+  ident,
+  ident1,
+  includeStd,
+  makeClass,
+  mkConstMethod,
+  mkCtor,
+  mkMethod,
+  mkMethod',
+  mkProp,
+  np,
+  )
+import Foreign.Hoppy.Generator.Types (boolT, enumT, objT, ptrT, voidT)
+import Foreign.Hoppy.Generator.Version (collect, just)
+import Graphics.UI.Qtah.Generator.Flags (flagsT)
+import Graphics.UI.Qtah.Generator.Interface.Core.Types (fl_WindowFlags)
+import Graphics.UI.Qtah.Generator.Interface.Gui.QBrush (c_QBrush)
+import Graphics.UI.Qtah.Generator.Interface.Internal.Listener (listenerPtrQMdiSubWindow)
+import {-# SOURCE #-} Graphics.UI.Qtah.Generator.Interface.Widgets.QMdiSubWindow (c_QMdiSubWindow)
+import Graphics.UI.Qtah.Generator.Interface.Widgets.QTabWidget (e_TabPosition, e_TabShape)
+import Graphics.UI.Qtah.Generator.Interface.Widgets.QWidget (c_QWidget)
+import Graphics.UI.Qtah.Generator.Module (AModule (AQtModule), makeQtModule)
+import Graphics.UI.Qtah.Generator.Types
+
+aModule =
+  AQtModule $
+  makeQtModule ["Widgets", "QMdiArea"]
+  [ QtExportClassAndSignals c_QMdiArea signals
+  , qtExport e_AreaOption
+  , qtExport fl_AreaOptions
+  , qtExport e_ViewMode
+  , qtExport e_WindowOrder
+  ]
+
+(c_QMdiArea, signals) =
+  makeQtClassAndSignals signalGens $
+  addReqIncludes [includeStd "QMdiArea"] $
+  classSetEntityPrefix "" $
+  makeClass (ident "QMdiArea") Nothing [c_QWidget] $
+  collect
+  [ -- Ctors:
+    just $ mkCtor "new" np
+  , just $ mkCtor "newWithParent" [ptrT $ objT c_QWidget]
+    -- Properties:
+  , just $ mkProp "activationOrder" $ enumT e_WindowOrder
+  , just $ mkProp "background" $ objT c_QBrush
+  , just $ mkProp "documentMode" boolT
+  , just $ mkProp "tabPosition" $ enumT e_TabPosition
+  , just $ mkProp "tabShape" $ enumT e_TabShape
+  , just $ mkProp "tabsClosable" boolT
+  , just $ mkProp "tabsMovable" boolT
+  , just $ mkProp "viewMode" $ enumT e_ViewMode
+    -- Methods:
+  , just $ mkConstMethod "activeSubWindow" np $ ptrT $ objT c_QMdiSubWindow
+  , just $ mkMethod' "addSubWindow" "addSubWindow"
+    [ptrT $ objT c_QWidget] $ ptrT $ objT c_QMdiSubWindow
+  , just $ mkMethod' "addSubWindow" "addSubWindowWithFlags"
+    [ptrT $ objT c_QWidget, flagsT fl_WindowFlags] $ ptrT $ objT c_QMdiSubWindow
+  , just $ mkConstMethod "currentSubWindow" np $ ptrT $ objT c_QMdiSubWindow
+  , just $ mkMethod "removeSubWindow" [ptrT $ objT c_QWidget] voidT
+  , just $ mkMethod "setOption" [enumT e_AreaOption, boolT] voidT
+    -- TODO subWindowList
+  , just $ mkConstMethod "testOption" [enumT e_AreaOption] boolT
+    -- Slots:
+  , just $ mkMethod "activateNextSubWindow" np voidT
+  , just $ mkMethod "activatePreviousSubWindow" np voidT
+  , just $ mkMethod "cascadeSubWindows" np voidT
+  , just $ mkMethod "closeActiveSubWindow" np voidT
+  , just $ mkMethod "closeAllSubWindows" np voidT
+  , just $ mkMethod "setActiveSubWindow" [ptrT $ objT c_QMdiSubWindow] voidT
+  , just $ mkMethod "tileSubWindows" np voidT
+  ]
+
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "subWindowActivated" listenerPtrQMdiSubWindow
+  ]
+
+(e_AreaOption, fl_AreaOptions) =
+  makeQtEnumAndFlags (ident1 "QMdiArea" "AreaOption") "AreaOptions" [includeStd "QMdiArea"]
+  [ "DontMaximizeSubWindowOnActivation"
+  ]
+
+e_ViewMode =
+  makeQtEnum (ident1 "QMdiArea" "ViewMode") [includeStd "QMdiArea"]
+  [ "SubWindowView"
+  , "TabbedView"
+  ]
+
+e_WindowOrder =
+  makeQtEnum (ident1 "QMdiArea" "WindowOrder") [includeStd "QMdiArea"]
+  [ "CreationOrder"
+  , "StackingOrder"
+  , "ActivationHistoryOrder"
+  ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMdiSubWindow.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMdiSubWindow.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMdiSubWindow.hs
@@ -0,0 +1,94 @@
+-- This file is part of Qtah.
+--
+-- Copyright 2015-2020 The Qtah Authors.
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU Lesser General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU Lesser General Public License for more details.
+--
+-- You should have received a copy of the GNU Lesser General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+module Graphics.UI.Qtah.Generator.Interface.Widgets.QMdiSubWindow (
+  aModule,
+  c_QMdiSubWindow,
+  ) where
+
+import Foreign.Hoppy.Generator.Spec (
+  addReqIncludes,
+  classSetEntityPrefix,
+  ident,
+  ident1,
+  includeStd,
+  makeClass,
+  mkConstMethod,
+  mkCtor,
+  mkMethod,
+  mkProp,
+  np,
+  )
+import Foreign.Hoppy.Generator.Types (boolT, enumT, intT, objT, ptrT, voidT)
+import Foreign.Hoppy.Generator.Version (collect, just)
+import Graphics.UI.Qtah.Generator.Flags (flagsT)
+import Graphics.UI.Qtah.Generator.Interface.Core.Types (fl_WindowFlags)
+import Graphics.UI.Qtah.Generator.Interface.Internal.Listener (
+  listener,
+  listenerWindowStatesWindowStates,
+  )
+import Graphics.UI.Qtah.Generator.Interface.Widgets.QMdiArea (c_QMdiArea)
+import Graphics.UI.Qtah.Generator.Interface.Widgets.QMenu (c_QMenu)
+import Graphics.UI.Qtah.Generator.Interface.Widgets.QWidget (c_QWidget)
+import Graphics.UI.Qtah.Generator.Module (AModule (AQtModule), makeQtModule)
+import Graphics.UI.Qtah.Generator.Types
+
+aModule =
+  AQtModule $
+  makeQtModule ["Widgets", "QMdiSubWindow"]
+  [ QtExportClassAndSignals c_QMdiSubWindow signals
+  , qtExport e_SubWindowOption
+  , qtExport fl_SubWindowOptions
+  ]
+
+(c_QMdiSubWindow, signals) =
+  makeQtClassAndSignals signalGens $
+  addReqIncludes [includeStd "QMdiSubWindow"] $
+  classSetEntityPrefix "" $
+  makeClass (ident "QMdiSubWindow") Nothing [c_QWidget] $
+  collect
+  [ -- Ctors:
+    just $ mkCtor "new" np
+  , just $ mkCtor "newWithParent" [ptrT $ objT c_QWidget]
+  , just $ mkCtor "newWithParentAndFlags" [ptrT $ objT c_QWidget, flagsT fl_WindowFlags]
+    -- Properties:
+  , just $ mkProp "keyboardPageStep" intT
+  , just $ mkProp "keyboardSingleStep" intT
+  , just $ mkProp "systemMenu" $ ptrT $ objT c_QMenu
+  , just $ mkProp "widget" $ ptrT $ objT c_QWidget
+    -- Methods:
+  , just $ mkConstMethod "isShaded" np boolT
+  , just $ mkConstMethod "mdiArea" np $ ptrT $ objT c_QMdiArea
+  , just $ mkMethod "setOption" [enumT e_SubWindowOption, boolT] voidT
+  , just $ mkConstMethod "testOption" [enumT e_SubWindowOption] boolT
+    -- Slots:
+  , just $ mkMethod "showShaded" np voidT
+  , just $ mkMethod "showSystemMenu" np voidT
+  ]
+
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "aboutToActivate" listener
+  , makeSignal "windowStateChanged" listenerWindowStatesWindowStates
+  ]
+
+(e_SubWindowOption, fl_SubWindowOptions) =
+  makeQtEnumAndFlags (ident1 "QMdiSubWindow" "SubWindowOption") "SubWindowOptions"
+  [includeStd "QMdiSubWindow"]
+  [ "RubberBandResize"
+  , "RubberBandMove"
+  ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMdiSubWindow.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMdiSubWindow.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMdiSubWindow.hs-boot
@@ -0,0 +1,24 @@
+-- This file is part of Qtah.
+--
+-- Copyright 2015-2020 The Qtah Authors.
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU Lesser General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU Lesser General Public License for more details.
+--
+-- You should have received a copy of the GNU Lesser General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+module Graphics.UI.Qtah.Generator.Interface.Widgets.QMdiSubWindow (
+  c_QMdiSubWindow,
+  ) where
+
+import Foreign.Hoppy.Generator.Spec (Class)
+
+c_QMdiSubWindow :: Class
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMenu.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMenu.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMenu.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMenu.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -51,11 +51,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QMenu"] $
-  qtExport c_QMenu :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QMenu"]
+  [ QtExportClassAndSignals c_QMenu signals ]
 
-c_QMenu =
+(c_QMenu, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QMenu"] $
   classSetEntityPrefix "" $
   makeClass (ident "QMenu") Nothing [c_QWidget] $
@@ -108,9 +108,10 @@
   , just $ mkProp "title" $ objT c_QString
   ]
 
-signals =
-  [ makeSignal c_QMenu "aboutToHide" listener
-  , makeSignal c_QMenu "aboutToShow" listener
-  , makeSignal c_QMenu "hovered" listenerPtrQAction
-  , makeSignal c_QMenu "triggered" listenerPtrQAction
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "aboutToHide" listener
+  , makeSignal "aboutToShow" listener
+  , makeSignal "hovered" listenerPtrQAction
+  , makeSignal "triggered" listenerPtrQAction
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMenuBar.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMenuBar.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMenuBar.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMenuBar.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -51,11 +51,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QMenuBar"] $
-  qtExport c_QMenuBar :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QMenuBar"]
+  [ QtExportClassAndSignals c_QMenuBar signals ]
 
-c_QMenuBar =
+(c_QMenuBar, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QMenuBar"] $
   classSetEntityPrefix "" $
   makeClass (ident "QMenuBar") Nothing [c_QWidget] $
@@ -83,7 +83,8 @@
   , just $ mkMethod "setCornerWidget" [ptrT $ objT c_QWidget, enumT e_Corner] voidT
   ]
 
-signals =
-  [ makeSignal c_QMenuBar "hovered" listenerPtrQAction
-  , makeSignal c_QMenuBar "triggered" listenerPtrQAction
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "hovered" listenerPtrQAction
+  , makeSignal "triggered" listenerPtrQAction
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMessageBox.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMessageBox.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMessageBox.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QMessageBox.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -60,16 +60,16 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QMessageBox"] $
-  qtExport c_QMessageBox :
-  map QtExportSignal signals ++
-  [ qtExport e_ButtonRole
+  makeQtModule ["Widgets", "QMessageBox"]
+  [ QtExportClassAndSignals c_QMessageBox signals
+  , qtExport e_ButtonRole
   , qtExport e_Icon
   , qtExport e_StandardButton
   , qtExport fl_StandardButtons
   ]
 
-c_QMessageBox =
+(c_QMessageBox, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QMessageBox"] $
   classSetEntityPrefix "" $
   makeClass (ident "QMessageBox") Nothing [c_QDialog] $
@@ -141,8 +141,9 @@
     enumT e_StandardButton
   ]
 
-signals =
-  [ makeSignal c_QMessageBox "buttonClicked" listenerPtrQAbstractButton
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "buttonClicked" listenerPtrQAbstractButton
   ]
 
 e_ButtonRole =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QOpenGLWidget.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QOpenGLWidget.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QOpenGLWidget.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QOpenGLWidget.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -51,12 +51,13 @@
 aModule =
   AQtModule $
   makeQtModuleWithMinVersion ["Widgets", "QOpenGLWidget"] minVersion $
-  [ qtExport c_QOpenGLWidget ] ++
-  map QtExportSignal signals ++
   collect
-  [ test (qtVersion >= [5, 5]) $ qtExport e_UpdateBehavior ]
+  [ just $ QtExportClassAndSignals c_QOpenGLWidget signals
+  , test (qtVersion >= [5, 5]) $ qtExport e_UpdateBehavior
+  ]
 
-c_QOpenGLWidget =
+(c_QOpenGLWidget, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QOpenGLWidget"] $
   classSetEntityPrefix "" $
   makeClass (ident "QOpenGLWidget") Nothing [c_QWidget] $
@@ -74,11 +75,12 @@
   , test (qtVersion >= [5, 5]) $ mkProp "updateBehavior" $ enumT e_UpdateBehavior
   ]
 
-signals =
-  [ makeSignal c_QOpenGLWidget "aboutToCompose" listener
-  , makeSignal c_QOpenGLWidget "aboutToResize" listener
-  , makeSignal c_QOpenGLWidget "frameSwapped" listener
-  , makeSignal c_QOpenGLWidget "resized" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "aboutToCompose" listener
+  , makeSignal "aboutToResize" listener
+  , makeSignal "frameSwapped" listener
+  , makeSignal "resized" listener
   ]
 
 e_UpdateBehavior =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QProgressBar.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QProgressBar.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QProgressBar.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QProgressBar.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -49,13 +49,13 @@
 aModule =
   AQtModule $
   makeQtModule ["Widgets", "QProgressBar"] $
-  qtExport c_QProgressBar :
-  map QtExportSignal signals ++
   collect
-  [ test (qtVersion >= [4, 1]) $ qtExport e_Direction
+  [ just $ QtExportClassAndSignals c_QProgressBar signals
+  , test (qtVersion >= [4, 1]) $ qtExport e_Direction
   ]
 
-c_QProgressBar =
+(c_QProgressBar, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QProgressBar"] $
   classSetEntityPrefix "" $
   makeClass (ident "QProgressBar") Nothing [c_QWidget] $
@@ -78,8 +78,9 @@
   , just $ mkProp "value" intT
   ]
 
-signals =
-  [ makeSignal c_QProgressBar "valueChanged" listenerInt
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "valueChanged" listenerInt
   ]
 
 -- Introduced in Qt 4.1.
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QPushButton.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QPushButton.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QPushButton.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QPushButton.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QRadioButton.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QRadioButton.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QRadioButton.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QRadioButton.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QRubberBand.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QRubberBand.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QRubberBand.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QRubberBand.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QScrollArea.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QScrollArea.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QScrollArea.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QScrollArea.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QScrollBar.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QScrollBar.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QScrollBar.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QScrollBar.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSizePolicy.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSizePolicy.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSizePolicy.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSizePolicy.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSlider.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSlider.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSlider.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSlider.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSpacerItem.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSpacerItem.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSpacerItem.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSpacerItem.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSpinBox.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSpinBox.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSpinBox.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSpinBox.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -49,11 +49,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QSpinBox"] $
-  qtExport c_QSpinBox :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QSpinBox"]
+  [ QtExportClassAndSignals c_QSpinBox signals ]
 
-c_QSpinBox =
+(c_QSpinBox, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QSpinBox"] $
   classSetEntityPrefix "" $
   makeClass (ident "QSpinBox") Nothing [c_QAbstractSpinBox] $
@@ -71,7 +71,8 @@
   , just $ mkProp "value" intT
   ]
 
-signals =
-  [ makeSignal' c_QSpinBox "valueChanged" "valueChangedInt" listenerInt
-  , makeSignal' c_QSpinBox "valueChanged" "valueChangedString" listenerQString
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal' "valueChanged" "valueChangedInt" listenerInt
+  , makeSignal' "valueChanged" "valueChangedString" listenerQString
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSplitter.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSplitter.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSplitter.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSplitter.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -44,11 +44,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QSplitter"] $
-  (qtExport c_QSplitter) :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QSplitter"]
+  [ QtExportClassAndSignals c_QSplitter signals ]
 
-c_QSplitter =
+(c_QSplitter, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QSplitter"] $
   classSetEntityPrefix "" $
   makeClass (ident "QSplitter") Nothing [c_QFrame]
@@ -77,5 +77,6 @@
   , mkConstMethod "widget" [intT] $ ptrT $ objT c_QWidget
   ]
 
-signals =
-  [ makeSignal c_QSplitter "splitterMoved" listenerIntInt ]
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "splitterMoved" listenerIntInt ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStackedLayout.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStackedLayout.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStackedLayout.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStackedLayout.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -46,16 +46,13 @@
 aModule =
   AQtModule $
   makeQtModule ["Widgets", "QStackedLayout"] $
-  collect $
-  concat
-  [ [ just $ qtExport c_QStackedLayout
-    ]
-  , map (just . QtExportSignal) signals
-  , [ test (qtVersion >= [4, 4]) $ qtExport e_StackingMode
-    ]
+  collect
+  [ just $ QtExportClassAndSignals c_QStackedLayout signals
+  , test (qtVersion >= [4, 4]) $ qtExport e_StackingMode
   ]
 
-c_QStackedLayout =
+(c_QStackedLayout, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QStackedLayout"] $
   classSetEntityPrefix "" $
   makeClass (ident "QStackedLayout") Nothing [c_QLayout] $
@@ -72,9 +69,10 @@
   , just $ mkConstMethod "widget" [intT] $ ptrT $ objT c_QWidget
   ]
 
-signals =
-  [ makeSignal c_QStackedLayout "currentChanged" listenerInt
-  , makeSignal c_QStackedLayout "widgetRemoved" listenerInt
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "currentChanged" listenerInt
+  , makeSignal "widgetRemoved" listenerInt
   ]
 
 e_StackingMode =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStackedWidget.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStackedWidget.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStackedWidget.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStackedWidget.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -42,11 +42,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QStackedWidget"] $
-  qtExport c_QStackedWidget :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QStackedWidget"]
+  [ QtExportClassAndSignals c_QStackedWidget signals ]
 
-c_QStackedWidget =
+(c_QStackedWidget, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QStackedWidget"] $
   classSetEntityPrefix "" $
   makeClass (ident "QStackedWidget") Nothing [c_QFrame]
@@ -62,7 +62,8 @@
   , mkConstMethod "widget" [intT] $ ptrT $ objT c_QWidget
   ]
 
-signals =
-  [ makeSignal c_QStackedWidget "currentChanged" listenerInt
-  , makeSignal c_QStackedWidget "widgetRemoved" listenerInt
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "currentChanged" listenerInt
+  , makeSignal "widgetRemoved" listenerInt
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStatusBar.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStatusBar.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStatusBar.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStatusBar.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -44,11 +44,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QStatusBar"] $
-  qtExport c_QStatusBar :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QStatusBar"]
+  [ QtExportClassAndSignals c_QStatusBar signals ]
 
-c_QStatusBar =
+(c_QStatusBar, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QStatusBar"] $
   classSetEntityPrefix "" $
   makeClass (ident "QStatusBar") Nothing [c_QWidget]
@@ -72,6 +72,7 @@
   , mkBoolIsProp "sizeGripEnabled"
   ]
 
-signals =
-  [ makeSignal c_QStatusBar "messageChanged" listenerQString
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "messageChanged" listenerQString
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStyledItemDelegate.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStyledItemDelegate.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStyledItemDelegate.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QStyledItemDelegate.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2018-2019 The Qtah Authors.
+-- Copyright 2018-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSystemTrayIcon.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSystemTrayIcon.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSystemTrayIcon.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSystemTrayIcon.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -54,14 +54,14 @@
 
 aModule =
   AQtModule $
-  makeQtModuleWithMinVersion ["Widgets", "QSystemTrayIcon"] [4, 2] $
-  qtExport c_QSystemTrayIcon :
-  map QtExportSignal signals ++
-  [ qtExport e_ActivationReason
+  makeQtModuleWithMinVersion ["Widgets", "QSystemTrayIcon"] [4, 2]
+  [ QtExportClassAndSignals c_QSystemTrayIcon signals
+  , qtExport e_ActivationReason
   , qtExport e_MessageIcon
   ]
 
-c_QSystemTrayIcon =
+(c_QSystemTrayIcon, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QSystemTrayIcon"] $
   classSetEntityPrefix "" $
   makeClass (ident "QSystemTrayIcon") Nothing [c_QObject]
@@ -83,9 +83,10 @@
   , mkBoolIsProp "visible"
   ]
 
-signals =
-  [ makeSignal c_QSystemTrayIcon "activated" listenerQSystemTrayIconActivationReason
-  , makeSignal c_QSystemTrayIcon "messageClicked" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "activated" listenerQSystemTrayIconActivationReason
+  , makeSignal "messageClicked" listener
   ]
 
 e_ActivationReason =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSystemTrayIcon.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSystemTrayIcon.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSystemTrayIcon.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QSystemTrayIcon.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTabWidget.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTabWidget.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTabWidget.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTabWidget.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -17,6 +17,8 @@
 
 module Graphics.UI.Qtah.Generator.Interface.Widgets.QTabWidget (
   aModule,
+  e_TabPosition,
+  e_TabShape,
   ) where
 
 import Foreign.Hoppy.Generator.Spec (
@@ -50,14 +52,14 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QTabWidget"] $
-  qtExport c_QTabWidget :
-  map QtExportSignal signals ++
-  [ qtExport e_TabPosition
+  makeQtModule ["Widgets", "QTabWidget"]
+  [ QtExportClassAndSignals c_QTabWidget signals
+  , qtExport e_TabPosition
   , qtExport e_TabShape
   ]
 
-c_QTabWidget =
+(c_QTabWidget, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QTabWidget"] $
   classSetEntityPrefix "" $
   makeClass (ident "QTabWidget") Nothing [c_QWidget] $
@@ -115,9 +117,10 @@
   , "Triangular"
   ]
 
-signals =
-  [ makeSignal c_QTabWidget "currentChanged" listenerInt
-  , makeSignal c_QTabWidget "tabBarClicked" listenerInt
-  , makeSignal c_QTabWidget "tabBarDoubleClicked" listenerInt
-  , makeSignal c_QTabWidget "tabCloseRequested" listenerInt
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "currentChanged" listenerInt
+  , makeSignal "tabBarClicked" listenerInt
+  , makeSignal "tabBarDoubleClicked" listenerInt
+  , makeSignal "tabCloseRequested" listenerInt
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTextEdit.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTextEdit.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTextEdit.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTextEdit.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -58,14 +58,14 @@
 aModule =
   AQtModule $
   makeQtModule ["Widgets", "QTextEdit"] $
-  qtExport c_QTextEdit :
-  map QtExportSignal signals ++
-  [ qtExport e_LineWrapMode
+  [ QtExportClassAndSignals c_QTextEdit signals
+  , qtExport e_LineWrapMode
   , qtExport e_AutoFormattingFlag
   , qtExport fl_AutoFormatting
   ]
 
-c_QTextEdit =
+(c_QTextEdit, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QTextEdit"] $
   classSetEntityPrefix "" $
   makeClass (ident "QTextEdit") Nothing [c_QAbstractScrollArea]
@@ -136,14 +136,15 @@
   , mkMethod' "zoomOut" "zoomOutPoints" [intT] voidT
   ]
 
-signals =
-  [ makeSignal c_QTextEdit "copyAvailable" listenerBool
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "copyAvailable" listenerBool
     -- TODO currentCharFormatChanged
-  , makeSignal c_QTextEdit "cursorPositionChanged" listener
-  , makeSignal c_QTextEdit "redoAvailable" listenerBool
-  , makeSignal c_QTextEdit "selectionChanged" listener
-  , makeSignal c_QTextEdit "textChanged" listener
-  , makeSignal c_QTextEdit "undoAvailable" listenerBool
+  , makeSignal "cursorPositionChanged" listener
+  , makeSignal "redoAvailable" listenerBool
+  , makeSignal "selectionChanged" listener
+  , makeSignal "textChanged" listener
+  , makeSignal "undoAvailable" listenerBool
   ]
 
 e_LineWrapMode =
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolBar.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolBar.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolBar.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolBar.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -64,12 +64,12 @@
 aModule :: AModule
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QToolBar"] $
-  qtExport c_QToolBar :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QToolBar"]
+  [ QtExportClassAndSignals c_QToolBar signals ]
 
 c_QToolBar :: Class
-c_QToolBar =
+(c_QToolBar, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QToolBar"] $
   classSetEntityPrefix "" $
   makeClass (ident "QToolBar") Nothing [c_QWidget]
@@ -96,14 +96,14 @@
   , mkConstMethod "widgetForAction" [ptrT $ objT c_QAction] $ ptrT $ objT c_QWidget
   ]
 
-signals :: [Signal]
-signals =
-  [ makeSignal c_QToolBar "actionTriggered" listenerPtrQAction
-  , makeSignal c_QToolBar "allowedAreasChanged" listenerToolBarAreas
-  , makeSignal c_QToolBar "iconSizeChanged" listenerQSize
-  , makeSignal c_QToolBar "movableChanged" listenerBool
-  , makeSignal c_QToolBar "orientationChanged" listenerOrientation
-  , makeSignal c_QToolBar "toolButtonStyleChanged" listenerToolButtonStyle
-  , makeSignal c_QToolBar "topLevelChanged" listenerBool
-  , makeSignal c_QToolBar "visibilityChanged" listenerBool
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "actionTriggered" listenerPtrQAction
+  , makeSignal "allowedAreasChanged" listenerToolBarAreas
+  , makeSignal "iconSizeChanged" listenerQSize
+  , makeSignal "movableChanged" listenerBool
+  , makeSignal "orientationChanged" listenerOrientation
+  , makeSignal "toolButtonStyleChanged" listenerToolButtonStyle
+  , makeSignal "topLevelChanged" listenerBool
+  , makeSignal "visibilityChanged" listenerBool
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolBox.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolBox.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolBox.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolBox.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2018-2019 The Qtah Authors.
+-- Copyright 2018-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -49,12 +49,12 @@
 aModule :: AModule
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QToolBox"] $
-  qtExport c_QToolBox :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QToolBox"]
+  [ QtExportClassAndSignals c_QToolBox signals ]
 
 c_QToolBox :: Class
-c_QToolBox =
+(c_QToolBox, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QToolBox"] $
   classSetEntityPrefix "" $
   makeClass (ident "QToolBox") Nothing [c_QFrame]
@@ -96,7 +96,7 @@
   , mkMethod "setCurrentWidget" [ptrT $ objT c_QWidget] voidT
   ]
 
-signals :: [Signal]
-signals =
-  [ makeSignal c_QToolBox "currentChanged" listenerInt
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "currentChanged" listenerInt
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolButton.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolButton.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolButton.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QToolButton.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeView.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeView.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeView.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeView.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -53,12 +53,12 @@
 aModule :: AModule
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QTreeView"] $
-  qtExport c_QTreeView :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QTreeView"]
+  [ QtExportClassAndSignals c_QTreeView signals ]
 
 c_QTreeView :: Class
-c_QTreeView =
+(c_QTreeView, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QTreeView"] $
   classSetEntityPrefix "" $
   makeClass (ident "QTreeView") Nothing [c_QAbstractItemView] $
@@ -112,8 +112,8 @@
   , test (qtVersion >= [4, 2]) $ mkMethod "sortByColumn" [intT, enumT e_SortOrder] voidT
   ]
 
-signals :: [Signal]
-signals =
-  [ makeSignal c_QTreeView "collapsed" listenerRefConstQModelIndex
-  , makeSignal c_QTreeView "expanded" listenerRefConstQModelIndex
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "collapsed" listenerRefConstQModelIndex
+  , makeSignal "expanded" listenerRefConstQModelIndex
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidget.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidget.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidget.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidget.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -64,13 +64,13 @@
 aModule :: AModule
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QTreeWidget"] $
-  qtExport c_QTreeWidget :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QTreeWidget"]
+  [ QtExportClassAndSignals c_QTreeWidget signals ]
 
 
 c_QTreeWidget :: Class
-c_QTreeWidget =
+(c_QTreeWidget, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QTreeWidget"] $
   classSetEntityPrefix "" $
   makeClass (ident "QTreeWidget") Nothing [c_QTreeView] $
@@ -125,16 +125,16 @@
   , just $ mkMethod' "scrollToItem" "scrollToItemWithHint" [constT $ ptrT $ objT c_QTreeWidgetItem, enumT e_ScrollHint] voidT
   ]
 
-signals :: [Signal]
-signals =
-  [ makeSignal c_QTreeWidget "currentItemChanged" listenerPtrQTreeWidgetItemPtrQTreeWidgetItem
-  , makeSignal c_QTreeWidget "itemActivated" listenerPtrQTreeWidgetItemInt
-  , makeSignal c_QTreeWidget "itemChanged" listenerPtrQTreeWidgetItemInt
-  , makeSignal c_QTreeWidget "itemClicked" listenerPtrQTreeWidgetItemInt
-  , makeSignal c_QTreeWidget "itemCollapsed" listenerPtrQTreeWidgetItem
-  , makeSignal c_QTreeWidget "itemDoubleClicked" listenerPtrQTreeWidgetItemInt
-  , makeSignal c_QTreeWidget "itemEntered" listenerPtrQTreeWidgetItemInt
-  , makeSignal c_QTreeWidget "itemExpanded" listenerPtrQTreeWidgetItem
-  , makeSignal c_QTreeWidget "itemPressed" listenerPtrQTreeWidgetItemInt
-  , makeSignal c_QTreeWidget "itemSelectionChanged" listener
+signalGens :: [SignalGen]
+signalGens =
+  [ makeSignal "currentItemChanged" listenerPtrQTreeWidgetItemPtrQTreeWidgetItem
+  , makeSignal "itemActivated" listenerPtrQTreeWidgetItemInt
+  , makeSignal "itemChanged" listenerPtrQTreeWidgetItemInt
+  , makeSignal "itemClicked" listenerPtrQTreeWidgetItemInt
+  , makeSignal "itemCollapsed" listenerPtrQTreeWidgetItem
+  , makeSignal "itemDoubleClicked" listenerPtrQTreeWidgetItemInt
+  , makeSignal "itemEntered" listenerPtrQTreeWidgetItemInt
+  , makeSignal "itemExpanded" listenerPtrQTreeWidgetItem
+  , makeSignal "itemPressed" listenerPtrQTreeWidgetItemInt
+  , makeSignal "itemSelectionChanged" listener
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidget.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidget.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidget.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidget.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidgetItem.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidgetItem.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidgetItem.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidgetItem.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidgetItem.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidgetItem.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidgetItem.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QTreeWidgetItem.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QVBoxLayout.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QVBoxLayout.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QVBoxLayout.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QVBoxLayout.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QWidget.hs b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QWidget.hs
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QWidget.hs
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QWidget.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -81,11 +81,11 @@
 
 aModule =
   AQtModule $
-  makeQtModule ["Widgets", "QWidget"] $
-  qtExport c_QWidget :
-  map QtExportSignal signals
+  makeQtModule ["Widgets", "QWidget"]
+  [ QtExportClassAndSignals c_QWidget signals ]
 
-c_QWidget =
+(c_QWidget, signals) =
+  makeQtClassAndSignals signalGens $
   addReqIncludes [includeStd "QWidget"] $
   classSetEntityPrefix "" $
   makeClass (ident "QWidget") Nothing [c_QObject] $
@@ -342,10 +342,11 @@
   , just $ mkConstMethod "y" np intT
   ]
 
-signals =
+signalGens :: [SignalGen]
+signalGens =
   collect
-  [ just $ makeSignal c_QWidget "customContextMenuRequested" listenerQPoint
-  , test (qtVersion >= [5, 0]) $ makeSignal c_QWidget "windowIconChanged" listenerRefConstQIcon
+  [ just $ makeSignal "customContextMenuRequested" listenerQPoint
+  , test (qtVersion >= [5, 2]) $ makeSignal "windowIconChanged" listenerRefConstQIcon
     -- TODO windowIconTextChanged (>=5.0?  Deprecated by 5.7.)
-  , test (qtVersion >= [5, 0]) $ makeSignal c_QWidget "windowTitleChangd" listenerQString
+  , test (qtVersion >= [5, 2]) $ makeSignal "windowTitleChanged" listenerQString
   ]
diff --git a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QWidget.hs-boot b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QWidget.hs-boot
--- a/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QWidget.hs-boot
+++ b/src/Graphics/UI/Qtah/Generator/Interface/Widgets/QWidget.hs-boot
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
diff --git a/src/Graphics/UI/Qtah/Generator/Module.hs b/src/Graphics/UI/Qtah/Generator/Module.hs
--- a/src/Graphics/UI/Qtah/Generator/Module.hs
+++ b/src/Graphics/UI/Qtah/Generator/Module.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -15,6 +15,8 @@
 -- You should have received a copy of the GNU Lesser General Public License
 -- along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+{-# LANGUAGE CPP #-}
+
 module Graphics.UI.Qtah.Generator.Module (
   AModule (..),
   aModuleHoppyModules,
@@ -32,7 +34,9 @@
 import Data.Foldable (forM_)
 import Data.List (find, intersperse, sort)
 import Data.Maybe (isJust)
+#if !MIN_VERSION_base(4,13,0)
 import Data.Monoid (mconcat)
+#endif
 import Foreign.Hoppy.Generator.Language.Cpp (chunkContents, execChunkWriter, sayType)
 import Foreign.Hoppy.Generator.Language.Haskell (
   Generator,
@@ -116,10 +120,10 @@
 import Graphics.UI.Qtah.Generator.Types (
   QtExport (
     QtExport,
+    QtExportClassAndSignals,
     QtExportEvent,
     QtExportFnRenamed,
     QtExportSceneEvent,
-    QtExportSignal,
     QtExportSpecials
   ),
   Signal,
@@ -289,7 +293,9 @@
     addExport rename
     sayBind rename $ getFnImportName fn
 
-  QtExportSignal sig -> sayExportSignal sig
+  QtExportClassAndSignals cls sigs -> do
+    sayExportClass cls
+    mapM_ sayExportSignal sigs
 
   QtExportEvent cls -> do
     sayExportClass cls
diff --git a/src/Graphics/UI/Qtah/Generator/Types.hs b/src/Graphics/UI/Qtah/Generator/Types.hs
--- a/src/Graphics/UI/Qtah/Generator/Types.hs
+++ b/src/Graphics/UI/Qtah/Generator/Types.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
@@ -25,14 +25,17 @@
   makeQtEnumAndFlags',
   makeQtEnumAndFlagsWithOverrides,
   ListenerInfo (ListenerInfo),
-  Signal, makeSignal, makeSignal',
+  Signal, SignalGen, makeSignal, makeSignal', makeSignalPrivate,
+  makeQtClassAndSignals,
   signalCName, signalHaskellName, signalClass, signalListenerClass, signalCallback,
   ) where
 
+import Data.Maybe (mapMaybe)
 import qualified Data.Set as S
 import Foreign.Hoppy.Generator.Spec (
   Callback,
   Class,
+  ClassEntity (CEMethod),
   CppEnum,
   Scoped (Unscoped),
   Export (Export),
@@ -42,6 +45,9 @@
   Identifier,
   Include,
   addReqIncludes,
+  callbackParams,
+  callbackReturn,
+  classAddEntities,
   enumAddEntryNameOverrides,
   enumSetHasBitOperations,
   enumSetUnknownValueEntry,
@@ -49,15 +55,22 @@
   identifierParts,
   idPartBase,
   makeAutoEnum,
+  mkMethod'_,
+  onParameterType,
+  stripToGc,
   toExtName,
   toExport,
   )
+import Graphics.UI.Qtah.Generator.Common (upperFirst)
 import Graphics.UI.Qtah.Generator.Flags (Flags, makeFlags)
 
 data QtExport =
   QtExport Export
   | QtExportFnRenamed Function String
-  | QtExportSignal Signal
+  | QtExportClassAndSignals Class [Signal]
+    -- ^ Exports a class together with signals that belong to it.  These signals
+    -- should have been constructed with 'makeQtClassAndSignals' so that the
+    -- class has manual emit methods.
   | QtExportEvent Class
   | QtExportSceneEvent Class
   | QtExportSpecials
@@ -71,7 +84,7 @@
 qtExportToExports qtExport = case qtExport of
   QtExport export -> [export]
   QtExportFnRenamed fn _ -> [Export fn]
-  QtExportSignal {} -> []
+  QtExportClassAndSignals cls _ -> [Export cls]
   QtExportEvent cls -> [Export cls]
   QtExportSceneEvent cls -> [Export cls]
   QtExportSpecials -> []
@@ -152,21 +165,85 @@
     -- ^ An appropriately typed listener class.
   , signalCallback :: Callback
     -- ^ The callback type used by the listener.
+  , signalPrivate :: Bool
+    -- ^ Most signals can both be connected to and emitted by the user.
+    -- @QObject::objectNameChanged@ for example is a \"private signal,\" which
+    -- can be connected to but not emitted manually.  For such signals, this
+    -- field is true.
   }
 
+-- | A curried function for constructing a signal that only needs the class that
+-- the signal belongs to.
+type SignalGen = Class -> Signal
+
 data ListenerInfo = ListenerInfo Class Callback
 
-makeSignal :: Class  -- ^ 'signalClass'
-           -> String  -- ^ 'signalCName'
+-- The class is the last argument to these makeSignal functions because it is
+-- curried; see qtExportClassAndSignals.
+
+-- TODO Docs here.
+
+-- | Constructs a signal for use with 'qtExportClassAndSignals'.  The signal can
+-- be listened for via Haskell callback functions.  The constructed signal is
+-- public: an "emit" method will also be added to the class for manually
+-- emitting the signal.
+--
+-- The first argument is used both as the signal's C++ name, and the name it
+-- will be given in Haskell.
+makeSignal :: String  -- ^ 'signalCName'
            -> ListenerInfo  -- ^ 'signalListenerClass' and 'signalCallback'.
-           -> Signal
-makeSignal cls cName (ListenerInfo listenerClass callback) =
-  Signal cls cName cName listenerClass callback
+           -> SignalGen  -- ^ Curried function to take 'signalClass' and return the signal.
+makeSignal cName (ListenerInfo listenerClass callback) cls =
+  Signal cls cName cName listenerClass callback False
 
-makeSignal' :: Class  -- ^ 'signalClass'
-            -> String  -- ^ 'signalCName'
+-- | Constructs a signal for use with 'qtExportClassAndSignals', as 'makeSignal'
+-- does, except separate C++ and Haskell names may be provided.
+--
+-- The first argument is used both as the signal's C++ name, and the second
+-- argument is the name it will be given in Haskell.  This is analogous to
+-- @mkMethod@ and @mkMethod'@.
+makeSignal' :: String  -- ^ 'signalCName'
             -> String  -- ^ 'signalHaskellName'
             -> ListenerInfo  -- ^ 'signalListenerClass' and 'signalCallback'.
-            -> Signal
-makeSignal' cls cName hsName (ListenerInfo listenerClass callback) =
-  Signal cls cName hsName listenerClass callback
+            -> SignalGen  -- ^ Curried function to take 'signalClass' and return the signal.
+makeSignal' cName hsName (ListenerInfo listenerClass callback) cls =
+  Signal cls cName hsName listenerClass callback False
+
+-- | Constructs a signal for use with 'qtExportClassAndSignals', as 'makeSignal'
+-- does, except the constructed signal is private: no "emit" method is added to
+-- the class for manually emitting the signal.
+makeSignalPrivate ::
+     String  -- ^ 'signalCName'
+  -> ListenerInfo  -- ^ 'signalListenerClass' and 'signalCallback'.
+  -> SignalGen  -- ^ Curried function to take 'signalClass' and return the signal.
+makeSignalPrivate cName (ListenerInfo listenerClass callback) cls =
+  Signal cls cName cName listenerClass callback True
+
+-- | Combines a class with signals that belong to it.  'SignalGen' values are
+-- combined with the class to produce 'Signal's, and methods for emitting
+-- (public) signals manually are added in the returned class.
+makeQtClassAndSignals :: [SignalGen] -> Class -> (Class, [Signal])
+makeQtClassAndSignals sigs cls = (cls', sigs')
+  where cls' = flip classAddEntities cls $ flip mapMaybe sigs' $ \sig ->
+          if signalPrivate sig
+          then Nothing
+          else Just $
+               let cName = signalCName sig
+                   -- We prepend "emit" to the name of the Haskell method to make it clear
+                   -- that it emits a signal, and to avoid collisions with other
+                   -- namespaces that are distinct in C++ but shared in Haskell.  For
+                   -- example, QAbstractItemView::DoubleClicked produces a 'doubleClicked'
+                   -- Haskell binding; without this prefix, we would also try to generate
+                   -- a method with that name.
+                   hsName = "emit" ++ upperFirst (signalHaskellName sig)
+                   callback = signalCallback sig
+                   -- We have to strip toGcT off of callback parameters.  It makes sense
+                   -- in callback arguments because we can have the GC manage objects the
+                   -- signal listener receives, but it doesn't make sense when passing
+                   -- objects *to* a manual signal emit call.  See for example
+                   -- cb_QModelIndexQModelIndexQVectorIntVoid.
+                   params = map (onParameterType stripToGc) $ callbackParams callback
+                   retType = callbackReturn callback
+               in CEMethod $ mkMethod'_ cName hsName params retType
+
+        sigs' = map ($ cls') sigs
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -1,6 +1,6 @@
 -- This file is part of Qtah.
 --
--- Copyright 2015-2019 The Qtah Authors.
+-- Copyright 2015-2020 The Qtah Authors.
 --
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU Lesser General Public License as published by
