2010-06-07 27 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

相關問題