2010-06-07 805 views
7

我想用在哈斯克尔程序itemDoubleClicked(QTreeWidgetItem*,int)信号我写,我现在用qtHaskell的GUI。要连接的功能我在做其他地方执行以下操作:如何使用`itemDoubleClicked(QTreeWidgetItem *,INT)`信号qtHaskell

dummyWidget <- myQWidget 
connectSlot object signal dummyWidget "customSlot()" $ f 

哪里object一些QWidgetsignal是代表信号的字符串,如"triggered()"f是我希望在发送signale时调用的函数。 API中的的connectSlot定义是:

class Qcs x where 
    connectSlot :: QObject a -> String -> QObject b -> String -> x -> IO() 

其中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()) 

传递的第一参数被认为是在QObject其中我使用的信号。正如你所看到的,没有例子f,连接到信号的功能,可以有两个进一步的参数来接收QWidget和信号发送的整数。有没有办法将该信号连接到自定义功能?

+0

qtHaskell几乎没有使用。我知道没有示例应用程序。为什么不使用gtk2hs或wxHaskell - 有更多的文档。 – 2010-06-07 17:06:18

+3

嗯,我喜欢Qt,而且有人必须是我想的第一个。直到我想使用这个信号的时候,它运行得非常好。如果没有解决方案,我想如果必须的话,我会使用gtk2hs。 – nano 2010-06-07 17:10:42

+0

@唐斯图尔特,的确,如果任何人试图使用qtHaskell的人建议切换到gtk2hs,qtHaskell将保持未使用:) @nano,我建议你问作者,也许他能够提供帮助。 – 2010-06-10 09:56:58

回答

1

注意:我只是作为文档离开这个答案。我的建议是基于一种误解,在这种情况下实际上并不奏效。


将它的工作叫connectSlot有部分应用自定义功能,如在qtHaskell primer"Signals and Slots"例子吗?

在该例子中,函数on_hello_clicked的类型为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 

因此,虽然on_hello_clicked没有一个类型,是的Qcs实例(因为它希望双方一个消息框,并一个按钮),部分应用on_hello_clicked mb

+0

是的,我一直在其他地方这样做,但在这一点上我不认为这会解决我的问题,因为部分应用的功能将是5。'connectSlot'的参数,我仍然无法将'QWidgetItem'和整数作为我的函数的参数,这会告诉我列表中的项被点击了。顺便说一句,只是获得'QWidgetItem'并忽略整数似乎也不工作。 – nano 2010-06-14 17:26:01

相关问题