2010-06-07 7 views
7

yılında `(QTreeWidgetItem *, int) itemDoubleClicked` sinyalini nasıl kullanılır ben GUI için qtHaskellkullanıyorum nerede yazıyorum bir Haskell programında itemDoubleClicked(QTreeWidgetItem*,int) sinyalini kullanmak istiyorum. object bazı QWidget ve signal olduğunuqtHaskell

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

sinyalini temsil eden bir dize, örneğin geçerli: Aşağıdaki Yaptığım diğer yerlerde var bir işlevi bağlamak için "triggered()" ve f, imza gönderildiğinde çağrılmak istediğim işlevdir. API connectSlot tanımıdır: Qcs örnekleri olan

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

: geçti

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

ilk Argümanlar Bir sinyal kullanıyorum hangi QObject olması gerekiyordu. Gördüğünüz gibi, f'un, sinyale bağlanma fonksiyonunun, QWidget ve sinyal ile gönderilen tam sayıyı elde etmek için iki argümanı olabileceği bir örnek yoktur. Yine de bu sinyali özel bir işleve bağlamanın bir yolu var mı?

+0

qtHaskell oldukça fazla kullanılmamış. Bunun için örnek uygulamalar bilmiyorum. Neden gtk2hs veya wxHaskell kullanmıyorsunuz - çok daha fazla dokümantasyon var. –

+3

Eh, Qt'yi severim, ve birisinin ilk sanırım olması gerekiyor. Bu sinyali kullanmak istediğim noktaya kadar oldukça iyi çalıştı. Eğer bir çözüm yoksa, olması gerekiyorsa gtk2hs kullanacağımı varsayalım. – nano

+0

@Don Stewart, gerçekten qtHaskell kullanmayı deneyen herkesin gtk2hs ye geçmesi tavsiye edilirse, qtHaskell kullanılmayacaksa :) @ nano, yazarına sormanızı öneririm, belki de yardım edebilir. –

cevap

1

NOT: Bu yanıtı burada yalnızca belge olarak bırakıyorum. Benim önerim bir yanlış anlaşılmaya dayanıyordu ve aslında bu durumda çalışmıyor.


o qtHaskell primer yılında "Signals and Slots" örnekte olduğu gibi, kısmen uygulanan özel bir işlevle connectSlot aramak işe yarar mı? fonksiyon on_hello_clicked Eğer f Sonunda ek Int argüman istiyorum dışında gibi görünmesini istediğimizi karşılık görünüyor QMessageBox() -> MyQPushButton -> IO() yazın ettiğini örnekte

.

Yazarlar öncelikle mesaj kutusuna uygulayarak connectSlot ile bu işlevi kullanın: istediği

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

Yani on_hello_clicked ise Qcs örneğidir olan bir türü yok (çünkü bir mesaj kutusu hem de Bir düğme), kısmen uygulanan on_hello_clicked mb yapar.

+0

Evet, bunu başka yerlerde yapıyorum, ama bu noktada, kısmen uygulanmış fonksiyon 5 olacağı için benim problemimi çözeceğini sanmıyorum.'connectSlot' argümanı ve ben hala 'QWidgetItem' ve fonksiyonum için argüman olarak tamsayı elde edemeyeceğim, ki bu da bir listedeki hangi maddenin tıklandığını söyler. Bu arada, sadece 'QWidgetItem' almak ve tamsayıyı göz ardı etmek de işe yaramıyor. – nano