A simple example using Handlers is as follows:
module Main where import Qtc.Classes.Qccs import Qtc.Classes.Qccs_h import Qtc.Classes.Gui import Qtc.ClassTypes.Gui import Qtc.Gui.Base import Qtc.Enums.Base import Qtc.Enums.Classes.Core import Qtc.Enums.Core.Qt import Qtc.Gui.QApplication import Qtc.Gui.QMessageBox import Qtc.Gui.QLabel import Qtc.Gui.QLabel_h import Qtc.Gui.QKeyEvent main :: IO Int main = do qApplication () tl <- qLabel "press key 'A'" setAlignment tl (fAlignCenter::Alignment) resize tl (200::Int, 60::Int) mb <- qMessageBox tl setHandler tl "keyPressEvent(QKeyEvent*)" $ tlkp mb qshow tl () qApplicationExec () tlkp :: QMessageBox () -> QLabel () -> QKeyEvent () -> IO () tlkp mb this ke = do k <- key ke () if (k == qEnum_toInt eKey_A) then do setText mb $ "You have pressed the 'A' key!" qshow mb () else return () keyPressEvent_h this ke
The setHandler
function has the general format:
setHandler
handler_object "handler_signature" handler_function
The handler_object
must be a previously
declared Qt object.
The "handler_signature"
string describes the
name and parameter types handler to be set.
The handler_function
is a partial
application of a Haskell function of type:
global_Haskell_parameters -> handler_object_type -> handler_parameters
Note that the handler function in the above examples terminates with
the function call keyPressEvent_h this ke
. This is a call
to the base class handler function which is often required in event handling,
to "pass on" the event to lower levels for normal processing.
This is available for all qtHaskell handler functions. The name of the
function to call is the same as in the handler_string
followed by _h
. The required parameters
are handler_object
followed by
handler_parameters
.
There is no need to subclass an object in order to set a handler on it. Subclassing is only required for objects that have custom signals or slots.