diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -207,8 +207,8 @@
   delStartingWithInDir "Q" $ startDir </> joinPath ["src", "Graphics", "UI", "Qtah", "Gui"]
   delStartingWithInDir "Q" $ startDir </> joinPath ["src", "Graphics", "UI", "Qtah", "Widgets"]
   delStartingWithInDir "Types.hs" $ startDir </> joinPath ["src", "Graphics", "UI", "Qtah", "Core"]
-  delFile True (startDir </> joinPath ["src", "Graphics", "UI", "Qtah", "Internal"])
-    "EventListener.hs"
+  mapM_ (delFile True (startDir </> joinPath ["src", "Graphics", "UI", "Qtah", "Internal"]))
+    ["Callback.hs", "EventListener.hs", "Listener.hs"]
 
   where verbosity = fromFlagOrDefault normal $ cleanVerbosity cleanFlags
 
diff --git a/qtah-qt5.cabal b/qtah-qt5.cabal
--- a/qtah-qt5.cabal
+++ b/qtah-qt5.cabal
@@ -1,5 +1,5 @@
 name: qtah-qt5
-version: 0.1.2
+version: 0.2.0
 synopsis: Qt bindings for Haskell
 homepage: http://khumba.net/projects/qtah
 license: LGPL-3
@@ -30,6 +30,7 @@
     , Graphics.UI.Qtah.Core.QList.QAbstractButton
     , Graphics.UI.Qtah.Core.QList.QObject
     , Graphics.UI.Qtah.Core.QList.QString
+    , Graphics.UI.Qtah.Core.QList.QVariant
     , Graphics.UI.Qtah.Core.QList.QWidget
     , Graphics.UI.Qtah.Core.QMargins
     , Graphics.UI.Qtah.Core.QMarginsF
@@ -43,12 +44,10 @@
     , Graphics.UI.Qtah.Core.QString
     , Graphics.UI.Qtah.Core.QStringList
     , Graphics.UI.Qtah.Core.QTimerEvent
+    , Graphics.UI.Qtah.Core.QVariant
     , Graphics.UI.Qtah.Core.QVector.QPoint
     , Graphics.UI.Qtah.Core.Types
     , Graphics.UI.Qtah.Event
-    -- TODO This should not be exposed directly, but there is no nice interface
-    -- to it right now.
-    , Graphics.UI.Qtah.Generated.Std
     , Graphics.UI.Qtah.Gui.HColor
     , Graphics.UI.Qtah.Gui.QActionEvent
     , Graphics.UI.Qtah.Gui.QClipboard
@@ -71,6 +70,9 @@
     , Graphics.UI.Qtah.Gui.QValidator
     , Graphics.UI.Qtah.Gui.QWheelEvent
     , Graphics.UI.Qtah.Signal
+    -- TODO This should not be exposed directly, but there is no nice interface
+    -- to it right now.
+    , Graphics.UI.Qtah.Std
     , Graphics.UI.Qtah.Widgets.QAbstractButton
     , Graphics.UI.Qtah.Widgets.QAbstractScrollArea
     , Graphics.UI.Qtah.Widgets.QAbstractSlider
@@ -91,6 +93,7 @@
     , Graphics.UI.Qtah.Widgets.QGridLayout
     , Graphics.UI.Qtah.Widgets.QGroupBox
     , Graphics.UI.Qtah.Widgets.QHBoxLayout
+    , Graphics.UI.Qtah.Widgets.QInputDialog
     , Graphics.UI.Qtah.Widgets.QLabel
     , Graphics.UI.Qtah.Widgets.QLayout
     , Graphics.UI.Qtah.Widgets.QLayoutItem
@@ -105,7 +108,9 @@
     , Graphics.UI.Qtah.Widgets.QRubberBand
     , Graphics.UI.Qtah.Widgets.QScrollArea
     , Graphics.UI.Qtah.Widgets.QScrollBar
+    , Graphics.UI.Qtah.Widgets.QSizePolicy
     , Graphics.UI.Qtah.Widgets.QSlider
+    , Graphics.UI.Qtah.Widgets.QSpacerItem
     , Graphics.UI.Qtah.Widgets.QSpinBox
     , Graphics.UI.Qtah.Widgets.QSplitter
     , Graphics.UI.Qtah.Widgets.QStackedLayout
@@ -116,8 +121,7 @@
     , Graphics.UI.Qtah.Widgets.QVBoxLayout
     , Graphics.UI.Qtah.Widgets.QWidget
   other-modules:
-      Graphics.UI.Qtah.Generated.Callback
-    , Graphics.UI.Qtah.Generated.Core.QChar
+      Graphics.UI.Qtah.Generated.Core.QChar
     , Graphics.UI.Qtah.Generated.Core.QChildEvent
     , Graphics.UI.Qtah.Generated.Core.QCoreApplication
     , Graphics.UI.Qtah.Generated.Core.QDir
@@ -126,6 +130,7 @@
     , Graphics.UI.Qtah.Generated.Core.QList.QAbstractButton
     , Graphics.UI.Qtah.Generated.Core.QList.QObject
     , Graphics.UI.Qtah.Generated.Core.QList.QString
+    , Graphics.UI.Qtah.Generated.Core.QList.QVariant
     , Graphics.UI.Qtah.Generated.Core.QList.QWidget
     , Graphics.UI.Qtah.Generated.Core.QMargins
     , Graphics.UI.Qtah.Generated.Core.QMarginsF
@@ -139,6 +144,7 @@
     , Graphics.UI.Qtah.Generated.Core.QString
     , Graphics.UI.Qtah.Generated.Core.QStringList
     , Graphics.UI.Qtah.Generated.Core.QTimerEvent
+    , Graphics.UI.Qtah.Generated.Core.QVariant
     , Graphics.UI.Qtah.Generated.Core.QVector.QPoint
     , Graphics.UI.Qtah.Generated.Core.QVector.QPointF
     , Graphics.UI.Qtah.Generated.Core.Types
@@ -163,7 +169,6 @@
     , Graphics.UI.Qtah.Generated.Gui.QValidator
     , Graphics.UI.Qtah.Generated.Gui.QWheelEvent
     , Graphics.UI.Qtah.Generated.Internal.EventListener
-    , Graphics.UI.Qtah.Generated.Listener
     , Graphics.UI.Qtah.Generated.Widgets.QAbstractButton
     , Graphics.UI.Qtah.Generated.Widgets.QAbstractScrollArea
     , Graphics.UI.Qtah.Generated.Widgets.QAbstractSlider
@@ -184,6 +189,7 @@
     , Graphics.UI.Qtah.Generated.Widgets.QGridLayout
     , Graphics.UI.Qtah.Generated.Widgets.QGroupBox
     , Graphics.UI.Qtah.Generated.Widgets.QHBoxLayout
+    , Graphics.UI.Qtah.Generated.Widgets.QInputDialog
     , Graphics.UI.Qtah.Generated.Widgets.QLabel
     , Graphics.UI.Qtah.Generated.Widgets.QLayout
     , Graphics.UI.Qtah.Generated.Widgets.QLayoutItem
@@ -198,7 +204,9 @@
     , Graphics.UI.Qtah.Generated.Widgets.QRubberBand
     , Graphics.UI.Qtah.Generated.Widgets.QScrollArea
     , Graphics.UI.Qtah.Generated.Widgets.QScrollBar
+    , Graphics.UI.Qtah.Generated.Widgets.QSizePolicy
     , Graphics.UI.Qtah.Generated.Widgets.QSlider
+    , Graphics.UI.Qtah.Generated.Widgets.QSpacerItem
     , Graphics.UI.Qtah.Generated.Widgets.QSpinBox
     , Graphics.UI.Qtah.Generated.Widgets.QSplitter
     , Graphics.UI.Qtah.Generated.Widgets.QStackedLayout
@@ -208,7 +216,9 @@
     , Graphics.UI.Qtah.Generated.Widgets.QTextEdit
     , Graphics.UI.Qtah.Generated.Widgets.QVBoxLayout
     , Graphics.UI.Qtah.Generated.Widgets.QWidget
+    , Graphics.UI.Qtah.Internal.Callback
     , Graphics.UI.Qtah.Internal.EventListener
+    , Graphics.UI.Qtah.Internal.Listener
   other-extensions:
       FlexibleContexts
     , NoMonomorphismRestriction
@@ -216,9 +226,9 @@
       base >=4 && <5
     , binary >=0.7 && <0.9
     , bytestring >=0.10 && <0.11
-    , hoppy-runtime >=0.2 && <0.3
-    , qtah-cpp-qt5 >=0.1 && <0.2
-    , qtah-generator >=0.1 && <0.2
+    , hoppy-runtime >=0.3 && <0.4
+    , qtah-cpp-qt5 >=0.2 && <0.3
+    , qtah-generator >=0.2 && <0.3
   hs-source-dirs: src
   ghc-options: -W -fwarn-incomplete-patterns -fwarn-unused-do-bind
   default-language: Haskell2010
@@ -232,7 +242,7 @@
     , Graphics.UI.Qtah.EventTest
   build-depends:
       base >=4 && <5
-    , hoppy-runtime >=0.2 && <0.3
+    , hoppy-runtime >=0.3 && <0.4
     , HUnit >=1.2 && <1.4
     , qtah-qt5
   hs-source-dirs: tests
diff --git a/src/Graphics/UI/Qtah/Core/QList/QVariant.hs b/src/Graphics/UI/Qtah/Core/QList/QVariant.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Core/QList/QVariant.hs
diff --git a/src/Graphics/UI/Qtah/Core/QVariant.hs b/src/Graphics/UI/Qtah/Core/QVariant.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Core/QVariant.hs
diff --git a/src/Graphics/UI/Qtah/Generated/Callback.hs b/src/Graphics/UI/Qtah/Generated/Callback.hs
deleted file mode 100644
--- a/src/Graphics/UI/Qtah/Generated/Callback.hs
+++ /dev/null
diff --git a/src/Graphics/UI/Qtah/Generated/Core/QList/QVariant.hs b/src/Graphics/UI/Qtah/Generated/Core/QList/QVariant.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Generated/Core/QList/QVariant.hs
diff --git a/src/Graphics/UI/Qtah/Generated/Core/QVariant.hs b/src/Graphics/UI/Qtah/Generated/Core/QVariant.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Generated/Core/QVariant.hs
diff --git a/src/Graphics/UI/Qtah/Generated/Listener.hs b/src/Graphics/UI/Qtah/Generated/Listener.hs
deleted file mode 100644
--- a/src/Graphics/UI/Qtah/Generated/Listener.hs
+++ /dev/null
diff --git a/src/Graphics/UI/Qtah/Generated/Std.hs b/src/Graphics/UI/Qtah/Generated/Std.hs
deleted file mode 100644
--- a/src/Graphics/UI/Qtah/Generated/Std.hs
+++ /dev/null
diff --git a/src/Graphics/UI/Qtah/Generated/Widgets/QInputDialog.hs b/src/Graphics/UI/Qtah/Generated/Widgets/QInputDialog.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Generated/Widgets/QInputDialog.hs
diff --git a/src/Graphics/UI/Qtah/Generated/Widgets/QSizePolicy.hs b/src/Graphics/UI/Qtah/Generated/Widgets/QSizePolicy.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Generated/Widgets/QSizePolicy.hs
diff --git a/src/Graphics/UI/Qtah/Generated/Widgets/QSpacerItem.hs b/src/Graphics/UI/Qtah/Generated/Widgets/QSpacerItem.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Generated/Widgets/QSpacerItem.hs
diff --git a/src/Graphics/UI/Qtah/Internal/Callback.hs b/src/Graphics/UI/Qtah/Internal/Callback.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Internal/Callback.hs
diff --git a/src/Graphics/UI/Qtah/Internal/Listener.hs b/src/Graphics/UI/Qtah/Internal/Listener.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Internal/Listener.hs
diff --git a/src/Graphics/UI/Qtah/Std.hs b/src/Graphics/UI/Qtah/Std.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Std.hs
@@ -0,0 +1,280 @@
+{-# LANGUAGE CPP, FlexibleContexts, FlexibleInstances, GeneralizedNewtypeDeriving, MultiParamTypeClasses, ScopedTypeVariables, TypeSynonymInstances, UndecidableInstances #-}
+#if !MIN_VERSION_base(4,8,0)
+{-# LANGUAGE OverlappingInstances #-}
+#endif
+
+---------- GENERATED FILE, EDITS WILL BE LOST ----------
+
+module Graphics.UI.Qtah.Std (
+  StdStringValue (..),
+  StdStringConstPtr (..),
+  stdString_at,
+  stdString_get,
+  stdString_c_str,
+  stdString_size,
+  stdString_EQ,
+  stdString_NE,
+  stdString_LT,
+  stdString_LE,
+  stdString_GT,
+  stdString_GE,
+  StdStringPtr (..),
+  stdString_ASSIGN,
+  StdStringConst (..),
+  castStdStringToConst,
+  StdString (..),
+  castStdStringToNonconst,
+  stdString_new,
+  stdString_newFromCString,
+  stdString_newCopy,
+  StdStringSuper (..),
+  StdStringSuperConst (..),
+  ) where
+
+import Control.Monad ((<=<))
+import qualified Foreign as HoppyF
+import qualified Foreign.C as HoppyFC
+import qualified Foreign.Hoppy.Runtime as HoppyFHR
+import Prelude (($), (.), (/=), (==), (>>))
+import qualified Prelude as HoppyP
+
+foreign import ccall "genpop__StdString_new" stdString_new' ::  HoppyP.IO (HoppyF.Ptr StdString)
+foreign import ccall "genpop__StdString_newFromCString" stdString_newFromCString' ::  HoppyF.Ptr HoppyFC.CChar -> HoppyP.IO (HoppyF.Ptr StdString)
+foreign import ccall "genpop__StdString_newCopy" stdString_newCopy' ::  HoppyF.Ptr StdStringConst -> HoppyP.IO (HoppyF.Ptr StdString)
+foreign import ccall "genpop__StdString_at" stdString_at' ::  HoppyF.Ptr StdStringConst -> HoppyFC.CInt -> HoppyP.IO (HoppyF.Ptr HoppyFC.CChar)
+foreign import ccall "genpop__StdString_get" stdString_get' ::  HoppyF.Ptr StdStringConst -> HoppyFC.CInt -> HoppyP.IO HoppyFC.CChar
+foreign import ccall "genpop__StdString_c_str" stdString_c_str' ::  HoppyF.Ptr StdStringConst -> HoppyP.IO (HoppyF.Ptr HoppyFC.CChar)
+foreign import ccall "genpop__StdString_size" stdString_size' ::  HoppyF.Ptr StdStringConst -> HoppyP.IO HoppyFC.CSize
+foreign import ccall "genpop__StdString_EQ" stdString_EQ' ::  HoppyF.Ptr StdStringConst -> HoppyF.Ptr StdStringConst -> HoppyP.IO HoppyFHR.CBool
+foreign import ccall "genpop__StdString_NE" stdString_NE' ::  HoppyF.Ptr StdStringConst -> HoppyF.Ptr StdStringConst -> HoppyP.IO HoppyFHR.CBool
+foreign import ccall "genpop__StdString_LT" stdString_LT' ::  HoppyF.Ptr StdStringConst -> HoppyF.Ptr StdStringConst -> HoppyP.IO HoppyFHR.CBool
+foreign import ccall "genpop__StdString_LE" stdString_LE' ::  HoppyF.Ptr StdStringConst -> HoppyF.Ptr StdStringConst -> HoppyP.IO HoppyFHR.CBool
+foreign import ccall "genpop__StdString_GT" stdString_GT' ::  HoppyF.Ptr StdStringConst -> HoppyF.Ptr StdStringConst -> HoppyP.IO HoppyFHR.CBool
+foreign import ccall "genpop__StdString_GE" stdString_GE' ::  HoppyF.Ptr StdStringConst -> HoppyF.Ptr StdStringConst -> HoppyP.IO HoppyFHR.CBool
+foreign import ccall "genpop__StdString_ASSIGN" stdString_ASSIGN' ::  HoppyF.Ptr StdString -> HoppyF.Ptr StdStringConst -> HoppyP.IO (HoppyF.Ptr StdString)
+foreign import ccall "gendel__StdString" delete'StdString :: HoppyF.Ptr StdStringConst -> HoppyP.IO ()
+foreign import ccall "&gendel__StdString" deletePtr'StdString :: HoppyF.FunPtr (HoppyF.Ptr StdStringConst -> HoppyP.IO ())
+
+class StdStringValue a where
+  withStdStringPtr :: a -> (StdStringConst -> HoppyP.IO b) -> HoppyP.IO b
+
+#if MIN_VERSION_base(4,8,0)
+instance {-# OVERLAPPABLE #-} StdStringConstPtr a => StdStringValue a where
+#else
+instance StdStringConstPtr a => StdStringValue a where
+#endif
+  withStdStringPtr = HoppyP.flip ($) . toStdStringConst
+
+#if MIN_VERSION_base(4,8,0)
+instance {-# OVERLAPPING #-} StdStringValue (HoppyP.String) where
+#else
+instance StdStringValue (HoppyP.String) where
+#endif
+  withStdStringPtr = HoppyFHR.withCppObj
+
+class (HoppyFHR.CppPtr this) => StdStringConstPtr this where
+  toStdStringConst :: this -> StdStringConst
+
+stdString_at :: (StdStringValue arg'1) => arg'1 -> HoppyP.Int -> HoppyP.IO (HoppyF.Ptr HoppyFC.CChar)
+stdString_at arg'1 arg'2 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  let arg'2' = HoppyFHR.coerceIntegral arg'2 in
+  (stdString_at' arg'1' arg'2')
+
+stdString_get :: (StdStringValue arg'1) => arg'1 -> HoppyP.Int -> HoppyP.IO HoppyFC.CChar
+stdString_get arg'1 arg'2 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  let arg'2' = HoppyFHR.coerceIntegral arg'2 in
+  (stdString_get' arg'1' arg'2')
+
+stdString_c_str :: (StdStringValue arg'1) => arg'1 -> HoppyP.IO (HoppyF.Ptr HoppyFC.CChar)
+stdString_c_str arg'1 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  (stdString_c_str' arg'1')
+
+stdString_size :: (StdStringValue arg'1) => arg'1 -> HoppyP.IO HoppyFC.CSize
+stdString_size arg'1 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  (stdString_size' arg'1')
+
+stdString_EQ :: (StdStringValue arg'1, StdStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
+stdString_EQ arg'1 arg'2 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  withStdStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
+  HoppyP.fmap (/= 0)
+  (stdString_EQ' arg'1' arg'2')
+
+stdString_NE :: (StdStringValue arg'1, StdStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
+stdString_NE arg'1 arg'2 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  withStdStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
+  HoppyP.fmap (/= 0)
+  (stdString_NE' arg'1' arg'2')
+
+stdString_LT :: (StdStringValue arg'1, StdStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
+stdString_LT arg'1 arg'2 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  withStdStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
+  HoppyP.fmap (/= 0)
+  (stdString_LT' arg'1' arg'2')
+
+stdString_LE :: (StdStringValue arg'1, StdStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
+stdString_LE arg'1 arg'2 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  withStdStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
+  HoppyP.fmap (/= 0)
+  (stdString_LE' arg'1' arg'2')
+
+stdString_GT :: (StdStringValue arg'1, StdStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
+stdString_GT arg'1 arg'2 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  withStdStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
+  HoppyP.fmap (/= 0)
+  (stdString_GT' arg'1' arg'2')
+
+stdString_GE :: (StdStringValue arg'1, StdStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO HoppyP.Bool
+stdString_GE arg'1 arg'2 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  withStdStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
+  HoppyP.fmap (/= 0)
+  (stdString_GE' arg'1' arg'2')
+
+class (StdStringConstPtr this) => StdStringPtr this where
+  toStdString :: this -> StdString
+
+stdString_ASSIGN :: (StdStringPtr arg'1, StdStringValue arg'2) => arg'1 -> arg'2 -> HoppyP.IO StdString
+stdString_ASSIGN arg'1 arg'2 =
+  HoppyFHR.withCppPtr (toStdString arg'1) $ \arg'1' ->
+  withStdStringPtr arg'2 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'2' ->
+  HoppyP.fmap StdString
+  (stdString_ASSIGN' arg'1' arg'2')
+
+data StdStringConst =
+    StdStringConst (HoppyF.Ptr StdStringConst)
+  | StdStringConstGc (HoppyF.ForeignPtr ()) (HoppyF.Ptr StdStringConst)
+  deriving (HoppyP.Show)
+
+instance HoppyP.Eq StdStringConst where
+  x == y = HoppyFHR.toPtr x == HoppyFHR.toPtr y
+
+instance HoppyP.Ord StdStringConst where
+  compare x y = HoppyP.compare (HoppyFHR.toPtr x) (HoppyFHR.toPtr y)
+
+castStdStringToConst :: StdString -> StdStringConst
+castStdStringToConst (StdString ptr') = StdStringConst $ HoppyF.castPtr ptr'
+castStdStringToConst (StdStringGc fptr' ptr') = StdStringConstGc fptr' $ HoppyF.castPtr ptr'
+
+instance HoppyFHR.CppPtr StdStringConst where
+  nullptr = StdStringConst HoppyF.nullPtr
+  
+  withCppPtr (StdStringConst ptr') f' = f' ptr'
+  withCppPtr (StdStringConstGc fptr' ptr') f' = HoppyF.withForeignPtr fptr' $ \_ -> f' ptr'
+  
+  toPtr (StdStringConst ptr') = ptr'
+  toPtr (StdStringConstGc _ ptr') = ptr'
+  
+  touchCppPtr (StdStringConst _) = HoppyP.return ()
+  touchCppPtr (StdStringConstGc fptr' _) = HoppyF.touchForeignPtr fptr'
+
+instance HoppyFHR.Deletable StdStringConst where
+  delete (StdStringConst ptr') = delete'StdString ptr'
+  delete (StdStringConstGc _ _) = HoppyP.fail $ HoppyP.concat ["Deletable.delete: Asked to delete a GC-managed ", "StdStringConst", " object."]
+  
+  toGc this'@(StdStringConst ptr') = if ptr' == HoppyF.nullPtr then HoppyP.return this' else HoppyP.fmap (HoppyP.flip StdStringConstGc ptr') $ HoppyF.newForeignPtr (HoppyF.castFunPtr deletePtr'StdString :: HoppyF.FunPtr (HoppyF.Ptr () -> HoppyP.IO ())) (HoppyF.castPtr ptr' :: HoppyF.Ptr ())
+  toGc this'@(StdStringConstGc {}) = HoppyP.return this'
+
+instance HoppyFHR.Copyable StdStringConst StdString where copy = stdString_newCopy
+
+instance StdStringConstPtr StdStringConst where
+  toStdStringConst = HoppyP.id
+
+data StdString =
+    StdString (HoppyF.Ptr StdString)
+  | StdStringGc (HoppyF.ForeignPtr ()) (HoppyF.Ptr StdString)
+  deriving (HoppyP.Show)
+
+instance HoppyP.Eq StdString where
+  x == y = HoppyFHR.toPtr x == HoppyFHR.toPtr y
+
+instance HoppyP.Ord StdString where
+  compare x y = HoppyP.compare (HoppyFHR.toPtr x) (HoppyFHR.toPtr y)
+
+castStdStringToNonconst :: StdStringConst -> StdString
+castStdStringToNonconst (StdStringConst ptr') = StdString $ HoppyF.castPtr ptr'
+castStdStringToNonconst (StdStringConstGc fptr' ptr') = StdStringGc fptr' $ HoppyF.castPtr ptr'
+
+instance HoppyFHR.CppPtr StdString where
+  nullptr = StdString HoppyF.nullPtr
+  
+  withCppPtr (StdString ptr') f' = f' ptr'
+  withCppPtr (StdStringGc fptr' ptr') f' = HoppyF.withForeignPtr fptr' $ \_ -> f' ptr'
+  
+  toPtr (StdString ptr') = ptr'
+  toPtr (StdStringGc _ ptr') = ptr'
+  
+  touchCppPtr (StdString _) = HoppyP.return ()
+  touchCppPtr (StdStringGc fptr' _) = HoppyF.touchForeignPtr fptr'
+
+instance HoppyFHR.Deletable StdString where
+  delete (StdString ptr') = delete'StdString $ (HoppyF.castPtr ptr' :: HoppyF.Ptr StdStringConst)
+  delete (StdStringGc _ _) = HoppyP.fail $ HoppyP.concat ["Deletable.delete: Asked to delete a GC-managed ", "StdString", " object."]
+  
+  toGc this'@(StdString ptr') = if ptr' == HoppyF.nullPtr then HoppyP.return this' else HoppyP.fmap (HoppyP.flip StdStringGc ptr') $ HoppyF.newForeignPtr (HoppyF.castFunPtr deletePtr'StdString :: HoppyF.FunPtr (HoppyF.Ptr () -> HoppyP.IO ())) (HoppyF.castPtr ptr' :: HoppyF.Ptr ())
+  toGc this'@(StdStringGc {}) = HoppyP.return this'
+
+instance HoppyFHR.Copyable StdString StdString where copy = stdString_newCopy
+
+instance StdStringConstPtr StdString where
+  toStdStringConst (StdString ptr') = StdStringConst $ (HoppyF.castPtr :: HoppyF.Ptr StdString -> HoppyF.Ptr StdStringConst) ptr'
+  toStdStringConst (StdStringGc fptr' ptr') = StdStringConstGc fptr' $ (HoppyF.castPtr :: HoppyF.Ptr StdString -> HoppyF.Ptr StdStringConst) ptr'
+
+instance StdStringPtr StdString where
+  toStdString = HoppyP.id
+
+stdString_new ::  HoppyP.IO StdString
+stdString_new =
+  HoppyP.fmap StdString
+  (stdString_new')
+
+stdString_newFromCString ::  HoppyF.Ptr HoppyFC.CChar -> HoppyP.IO StdString
+stdString_newFromCString arg'1 =
+  let arg'1' = arg'1 in
+  HoppyP.fmap StdString
+  (stdString_newFromCString' arg'1')
+
+stdString_newCopy :: (StdStringValue arg'1) => arg'1 -> HoppyP.IO StdString
+stdString_newCopy arg'1 =
+  withStdStringPtr arg'1 $ HoppyP.flip HoppyFHR.withCppPtr $ \arg'1' ->
+  HoppyP.fmap StdString
+  (stdString_newCopy' arg'1')
+
+class StdStringSuper a where
+  downToStdString :: a -> StdString
+
+
+class StdStringSuperConst a where
+  downToStdStringConst :: a -> StdStringConst
+
+
+instance HoppyFHR.Assignable (HoppyF.Ptr (HoppyF.Ptr StdString)) StdString where
+  assign ptr' value' = HoppyF.poke ptr' $ HoppyFHR.toPtr value'
+
+instance StdStringValue a => HoppyFHR.Assignable StdString a where
+  assign x' y' = stdString_ASSIGN x' y' >> HoppyP.return ()
+
+instance HoppyFHR.Decodable (HoppyF.Ptr (HoppyF.Ptr StdString)) StdString where
+  decode = HoppyP.fmap StdString . HoppyF.peek
+
+instance HoppyFHR.Encodable StdString (HoppyP.String) where
+  encode =
+    HoppyP.flip HoppyFC.withCString stdString_newFromCString
+
+instance HoppyFHR.Encodable StdStringConst (HoppyP.String) where
+  encode = HoppyP.fmap (toStdStringConst) . HoppyFHR.encodeAs (HoppyP.undefined :: StdString)
+
+instance HoppyFHR.Decodable StdString (HoppyP.String) where
+  decode = HoppyFHR.decode . toStdStringConst
+
+instance HoppyFHR.Decodable StdStringConst (HoppyP.String) where
+  decode =
+    HoppyFC.peekCString <=< stdString_c_str
diff --git a/src/Graphics/UI/Qtah/Widgets/QInputDialog.hs b/src/Graphics/UI/Qtah/Widgets/QInputDialog.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Widgets/QInputDialog.hs
diff --git a/src/Graphics/UI/Qtah/Widgets/QSizePolicy.hs b/src/Graphics/UI/Qtah/Widgets/QSizePolicy.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Widgets/QSizePolicy.hs
diff --git a/src/Graphics/UI/Qtah/Widgets/QSpacerItem.hs b/src/Graphics/UI/Qtah/Widgets/QSpacerItem.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/UI/Qtah/Widgets/QSpacerItem.hs
diff --git a/tests/Graphics/UI/Qtah/EventTest.hs b/tests/Graphics/UI/Qtah/EventTest.hs
--- a/tests/Graphics/UI/Qtah/EventTest.hs
+++ b/tests/Graphics/UI/Qtah/EventTest.hs
@@ -43,7 +43,7 @@
 
   , "unregister works" ~: withScopedPtr QObject.new $ \receiver -> do
     countVar <- newMVar 0
-    let eventType = QEvent.QEventType_Drop
+    let eventType = QEvent.Drop
     reg <- onAnyEvent receiver $ \_ event -> do
       receivedType <- QEvent.eventType event
       when (receivedType == eventType) $ modifyMVar_ countVar $ return . (+ 1)
