I want to use the itemDoubleClicked(QTreeWidgetItem*,int)
signal in a Haskell program I'm writing where I am using qtHaskell for the GUI. To connect a function I have at other places done the following:
dummyWidget <- myQWidget
connectSlot object signal dummyWidget "customSlot()" $ f
Where object
is some QWidget
and signal
is a string representing the signal, e.g. "triggered()"
, and f
is the function I want to be called when the signale is send.
The definition of connectSlot
in the API is:
class Qcs x where
connectSlot :: QObject a -> String -> QObject b -> String -> x -> IO ()
where the instances ofQcs
are:
Qcs ()
Qcs (QObject c -> String -> IO ())
Qcs (QObject c -> Object d -> IO ())
Qcs (QObject c -> Bool -> IO ())
Qcs (QObject c -> Int -> IO ())
Qcs (QObject c -> IO ())
Qcs (QObject c -> OpenGLVersionFlag -> IO ())
The first Arguments passed is supposed to be the QObject
of which I'm using a signal. As you can see, there is no instance where f
, the function to connect to the signal, can have two further arguments to recieve the QWidget
and the integer send by the signal. Is there a way to nevertheless connect that signal to a custom function?
NOTE: I'm leaving this answer here only as documentation. My suggestion was based on a misunderstanding and doesn't actually work in this situation.
Would it work to call connectSlot
with a partially applied custom function, as in the "Signals and Slots" example in the qtHaskell primer?
In that example the function on_hello_clicked
has type QMessageBox () -> MyQPushButton -> IO ()
, which seems to correspond to what you want your f
to look like, except that you want an additional Int
argument at the end.
The authors use this function with connectSlot
by first applying it to their message box:
hello <- myQPushButton "Hello qtHaskell World"
resize hello (200::Int, 60::Int)
mb <- qMessageBox hello
connectSlot hello "clicked()" hello "click()" $ on_hello_clicked mb
So while on_hello_clicked
doesn't have a type that's an instance of Qcs
(since it wants both a message box and a button), the partially applied on_hello_clicked mb
does.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With