如何在qtHaskell中使用`itemDoubleClicked(QTreeWidgetItem*,int)`信号

nan*_*ano 7 qt haskell qt4

我想itemDoubleClicked(QTreeWidgetItem*,int)Haskell程序中使用信号,我正在编写我正在使用qtHaskell作为GUI的地方.要连接我在其他地方执行的功能,请执行以下操作:

dummyWidget <- myQWidget
connectSlot object signal dummyWidget "customSlot()" $ f
Run Code Online (Sandbox Code Playgroud)

其中object是some QWidget并且signal是表示信号的字符串,例如"triggered()",并且f是在发送信号时我想要调用的函数.connectSlotAPI中的定义是:

class Qcs x where
  connectSlot :: QObject a -> String -> QObject b -> String -> x -> IO ()
Run Code Online (Sandbox Code Playgroud)

其中的实例Qcs是:

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 ())
Run Code Online (Sandbox Code Playgroud)

通过的第一个Arguments应该是QObject我正在使用信号的.正如您所看到的,没有实例f,连接到信号的函数可以有两个进一步的参数来接收QWidget信号发送的整数和整数.有没有办法将该信号连接到自定义功能?

Tra*_*own 1

注意:我将此答案留在这里仅作为文档。我的建议是基于误解,在这种情况下实际上不起作用。


是否可以connectSlot使用部分应用的自定义函数进行调用,如qtHaskell 入门中的“信号和槽”示例?

在该示例中,该函数on_hello_clicked具有 type QMessageBox () -> MyQPushButton -> IO (),它似乎与您希望f的外观相对应,只是您希望Int在末尾有一个附加参数。

作者connectSlot首先将其应用到消息框来使用此函数:

hello <- myQPushButton "Hello qtHaskell World"
resize hello (200::Int, 60::Int)
mb <- qMessageBox hello 
connectSlot hello "clicked()" hello "click()" $ on_hello_clicked mb
Run Code Online (Sandbox Code Playgroud)

因此,虽然on_hello_clicked没有作为实例的类型Qcs(因为它需要消息框和按钮),但部分应用on_hello_clicked mb却有。