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

7

我希望在我正在编写的Haskell程序中使用itemDoubleClicked(QTreeWidgetItem*,int)信号,该程序使用qtHaskell作为GUI。要连接函数,我在其他地方完成了以下操作:

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

其中object是一个QWidget对象,signal是一个表示信号的字符串,例如"triggered()"f是当信号发送时我想要被调用的函数。 在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和由信号发送的整数。是否有一种方法将该信号连接到自定义函数?


qtHaskell几乎没有被使用。我不知道有没有它的示例应用程序。为什么不使用gtk2hs或wxHaskell——它们有更多的文档。 - Don Stewart
3
好的,我会尽力进行翻译。请注意,我的回答仅限于翻译,不包括解释或其他任何信息。以下是需要翻译的内容:Well, I like Qt, and someone has to be the first I suppose. Until the point where I wanted to use that signal it worked pretty well. If there is no solution I suppose I will use gtk2hs if it has to be.嗯,我喜欢 Qt,我想肯定有人得先试试吧。直到我想使用那个信号时它都表现得非常好。如果没有解决方案,我想我会使用 gtk2hs 如果必要的话。 - nano
@Don Stewart,确实,如果有人尝试使用qtHaskell,建议切换到gtk2hs,否则qtHaskell将无人问津 :)@nano,我建议你问问作者,也许他能帮忙。 - David V.
鼓励新用户使用未使用和未记录的库并不一定是对他们最好的体验。 - Don Stewart
@Don Stewart 不用担心。我喜欢挑战。 @David V. 你说得对,我会给主要开发者发送这个问题的链接邮件。 - nano
1个回答

1

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


使用部分应用的自定义函数调用connectSlot,例如"Signals and Slots"示例中的qtHaskell primer会起作用吗?

在该示例中,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 是。


是的,我在其他地方做过这个,但现在我不认为它会解决我的问题,因为部分应用的函数将是connectSlot的第5个参数,我仍然无法同时获取QWidgetItem和整数作为我的函数参数,这将告诉我单击列表中的哪个项目。顺便说一下,只获取QWidgetItem而忽略整数似乎也不起作用。 - nano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接